打通两台机器的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/

猜你喜欢

转载自mozhenghua.iteye.com/blog/1155256