`
mozhenghua
  • 浏览: 319400 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

打通两台机器的ssh

 
阅读更多

在分布式应用之中经常要将两台机器的命令打通,需要在A机器上触发B机器上的某条命令,比如,在做svn的主从同步服务过程中,需要在A机器上触发B机器上的 svn up /var/www/html 命令,在A机器上可以这样执行:

 

ssh 10.2.3.34 "svn up /var/www/html" 这条命令在控制台中执行的话会提示您需要输入B机器上的用户名密码,才能正常执行。问题是,如果要将这条命令写道shell 文件中,在执行过程中没有机会让你去输入用户信息。

这样就需要事先在AB两台机器之间建立信任机制。

 

打通两台服务器的SSH的方法简单,只要执行以下步骤就行了:

1 假设都是用root用户,在A机器上cd /root/.ssh  然后执行命令ssh-keygen命令,

  控制台会打印出以下提示,都敲击回车就行了

Enter file in which to save the key (/home/svnsync/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again:

 

 然后会在目录下产生一个新的公钥文件 id_rsa.pub,打开该公钥文件,将里面的内容拷贝下来

  如果之前你使用的 adduser svnsync(此应该为受控机)为系统添加了一个专门做svn同步的用户帐户,此时需要先执行以下

su - svnsync,然后执行以下 ssh 123.123.123.123 (ip随便好了),之后就 cd /home/svnsync/.ssh

2 打开B服务器的 /root/.ssh目录,(假设当前登录的用户是 root用户)vi authorized_keys 该文件,将光标移动到文件最后一行,将剪贴板中的内容添加到文件的结尾。

注意:authorized_keys 这个文件需要有执行权限,执行chmod 700  authorized_keys 就行了

3最后在A 上执行ssh 10.2.3.34 "svn up /var/www/html"敲击回车之后,会显示确认对话框,输入“yes”就ok了

 

注:默认情况下 用户的 当前目录都会在 /home/目录下,例如:/home/baisui /home/user2 等,也有不是这个目录下的,比如:在服务器上安装了tomcat5,tomcat5的拥有者为tomcat用户,但是在/home 目录下没有该用户的文件夹,但是可以用过执行 “sudo vi /etc/passwd” 这个命令来查看:

 

 

tomcat:x:91:91:Tomcat:/usr/share/tomcat5:/bin/sh

 有这么一条,说明tomcat的当前目录是 /usr/share/tomcat5 这个目录

 

 

另外,如果当前你没有root权限,如果要执行一些自动化的批处理,需要手工输入的话可以考虑使用 expect命令,可以帮你事半功倍,http://www.pythonclub.org/linux/expect   http://www.tcl.tk/man/expect5.31/expect.1.html

以下这段代码可以在 远端服务器上的/home/yunjiu.llh 目录下创建一个tmp目录

 

#!/usr/bin/expect

set timeout 30

#spawn ssh 172.24.157.108

expect -d<<EOF

spawn ssh -l yunjiu.llh 172.24.157.104

expect "*assword*"

send "123456\r"

expect "*]*"
 
#sleep 3

send "mkdir /home/yunjiu.llh/tmp\r" 

 expect "*]*"

exit

  

 一个远程执行ssh 环境变量的问题:

  执行如下代码:~/myscript.sh: line n: app: command not found,不能正常执行

显然在远程编辑 /etc/profile 文件没有效果,而是要 去编辑

vim /etc/bashrc,在文件最后export上环境变量

  http://feihu.me/blog/2014/env-problem-when-ssh-executing-command-on-remote/

 

 

Ansible利用代理服务器操作私有云N台服务器

假设需要通过Ansible操作私有网络中的N台服务器,执行机器是在私有网络外部,连接Ansible操作客户端(A)的有一台代理服务器(B),B与私有网络中的其他机器(C)是通过私钥认证打通的。

 

进行这个操作需要确定两部分连接是正常的,首先A->B, 和B->私有网络中的机器C

 

A->C打通可以以下步骤来确定:

  • 确认A上的Ansible操作端开启服务器Forward权限,vim /root/.ssh/config 
  • Host *
        ForwardAgent yes
        ForwardX11 no
        KeepAlive yes
        ServerAliveInterval 30
     ForwardAgent需要为yes
  • 确认A的公钥加入B的authorized_keys
  • 先到B机器执行ssh-add操作,确认ssh-add -l是否正常加入想要的私钥
  • 执行ssh-add -l 显示ssh-agent缓存中的秘钥配置,如果连接B的秘钥配置不在缓存中则进如下一步
  • 在B机器中将操作/home/centos/.ssh/authorized_keys 将私钥对应的公钥添加进去 
  • 执行ssh-add files/id_rsa003 将私钥加入到ssh-agent中
  • 验证ssh-add 是否成功,通过ssh到B机器  ssh centos@34.99.108.87 ,如正常登录哦则说明ssh-add 成功了

 

 

 

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics