在linux下,当使用ssh -p xxx user@ip登录另外一台服务器时,经常需要输入密码;或者使用scp命令拷贝文件到另外一台服务时,也提示需要密码,导致无法脚本自动化。当然可以使用第三方的开源工具expect编写密码自动输入脚本解决,在这里提供另外一种解决方式,即通过ssh-keygen的密钥进行身份校验,省去输入密码的烦恼,能够通过脚本自动拷贝文件。
登录远程服务器主要有2种方式:ssh与ssh2,无密码校验的原理都是一样的,但具体的处理方式有所不同。
环境:机器---A、B,系统--linux-suse 10
要实现A无密码访问B、A无密码拷贝文件到B、A无密码从B获取文件,需做以下设置。
1.ssh
1)在A上输入ssh-keygen -t rsa 命令,中间有提示要输入passphrase,不要做任何输入,一路回车即可
2)在~/.ssh/目录下生成2个文件:私钥证书id_rsa与公钥证书id_rsa.pub
3)将公钥证书id_rsa.pub拷贝到B的~/.ssh/目录下,如果使用scp命令,是需要输入密码的,因为此时未生效
4)将id_rsa.pub内容追加到B的身份验证列表authorized_keys文件中:
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
5)设置完毕
2.ssh2
1)在A上输入ssh-keygen -b 1024 -t rsa 命令,中间有提示要输入passphrase,不要做任何输入,一路回车即可
2)在~/.ssh/目录下生成2个文件:私钥证书id_rsa_1024_a与公钥证书id_rsa_1024_a.pub
3)将私钥id_rsa_1024_a添加到A的身份验证列表:
echo "IdKey id_rsa_1024_a" >> ~/.ssh2/identification
4)将公钥证书id_rsa_1024_a.pub拷贝到B的~/.ssh/目录下,如果使用scp命令,是需要输入密码的,因为此时未生效
5)将id_rsa_1024_a.pub内容追加到B的身份验证列表authorization文件中:
cat ~/.ssh/id_rsa_1024_a.pub >> ~/.ssh/authorization
6)设置完毕
设置完成后,再通过A登录B,或者A拷贝文件到B、A从B获取文件都不提示输入密码了。反之,通过B登录A、B获取A的文件、B拷贝文件到A还是会提示输入密码。