需要写一个脚本,自动远程重启服务器上的程序,可是使用ssh远程的时候需要输入密码,这个是个难点,于是在网上找了一个使用ssh不需要输入密码的方法,验证成功,现记录如下
需要说明的是,这里是使用root账号无密码登陆,如果是使用别的账号,那么想应的步骤在此账号下执行,公钥放在此账号的$HOME/.ssh/中,远端的目录需要自己创建
举例三种情况
1.本地root账号,用root账号登陆,本地用root创建的公钥放到远程root账号下的 $HOME/.ssh/下重命名 authorized_keys
2.本地机器是root账号,想用oracle登陆在远程的机器, 本地用root创建的公钥放到远程 oracle账号下的$HOME/.ssh/下重命名 authorized_keys
3.本地oracle 账号,远程oracle, 本地用oracle创建的公钥放到远程 oracle账号的$HOME/.ssh/下重命名 authorized_keys
环境:
主机1:192.168.161.10 linux
主机2:192.168.161.3 solaris
想从192.168.161.3不用密码登陆192.168.161.10
1.在192.168.161.3上执行
2.多了两个文件
3.把这个文件拷贝到对端机器拷贝为authorized_keys即可
scp id_rsa.pub root@192.168.161.10:/root/.ssh/authorized_keys
4.验证
在网上找个原理解释,不错
原理:
密匙认证需要依靠密匙,首先创建一对密匙(包括公匙和密匙,并且用公匙加密的数据只能用密匙解密),并把公匙放到需要远程服务器上。这样当登录远程 服务器时,客户端软件就会向服务器发出请求,请求用你的密匙进行认证。服务器收到请求之后,先在你在该服务器的宿主目录下寻找你的公匙,然后检查该公匙是 否是合法,如果合法就用公匙加密一随机数(即所谓的challenge)并发送给客户端软件。客户端软件收到 “challenge”之后就用私匙解密再把它发送给服务器。因为用公匙加密的数据只能用密匙解密,服务器经过比较就可以知道该客户连接的合法性。