建立ssh信任关系的方法
时间:2007-04-14 来源:ima
简介
ssh提供了一个加密的信道,在建立信任关系后,通信双方都采用加密的方式传输信息.本文整理了用ssh建立信任关系的方法
ssh程序的一些约定
ssh程序默认在每个用户的主目录下建立目录.ssh,用来存放密钥以及其他文件.如果启动了ssh服务器,处理ssh请求,会建立这个文件夹,并生成一些东西,常见的有
- authorization 一个记录一行,形式为 Key /home/secur/xx.pub ,表示和本机器建立信任关系的机器的公钥
- identification 一个记录一行,形式为 IdKey /home/secur/xx ,表示一个私钥文件
- hostkeys 一个文件夹,保存的是临时和本机建立信任关系的机器的公钥
- random_seed
当第一次处理ssh请求时,在.ssh目录找不到目标主机的公钥,则会向目标主机取得一个公钥作为加密的工具,然后获取/etc/passwd和/etc/shadow数据库中的用户名和密码作为验证方法
建立信任关系的方法
现在要建立乙机器到甲机器的信任关系,建立后,在甲机器上执行ssh 乙机器 命令,将不用输入密码
- 在甲机器上执行 命令ssh-keygen,任意输入什么,会在主目录下的.ssh获得两个文件,id_dsa_2048_a和id_dsa_2048_a.pub
- 将两个文件分别改名为任意一个名字a和a.pub,在.ssh目录下执行 echo IdKey a >> identification;甲机器的设定完成
- 将a.pub复制到乙机器的用户目录的.ssh下,,在.ssh目录下执行 echo Key a.pub >> authorization
常见问题根源
- ssh服务器配置,启动
- 秘钥文件的权限,设置成644,不同环境可能要求不同
一个expect 自动建立两台机器信任关系的脚本
#!/usr/bin/expect -f set timeout 60 set ip "172.1.1.1" set user dom set port 4321 set host ${user}@${ip}#$port set destpath /home/${user}/.ssh2/ set localpath ./ set passwd abcd set pri ${localpath}${ip}.id_dsa_2048_a set pub ${localpath}${ip}.id_dsa_2048_a.pub spawn ssh $host expect "*>*" {close;exit 0} \ "password*" {close;wait} spawn ssh-keygen expect "*Passphrase* " {send "\n"} expect "Again*" {send "\n"} expect eof {wait} exec mv ${localpath}id_dsa_2048_a $pri exec mv ${localpath}id_dsa_2048_a.pub $pub exec echo IdKey $pri >> ${localpath}identification spawn scp ${pub} ${host}:${destpath} expect "Are you*" {send "yes\n"} \ "*password*" {send "${passwd}\n"} expect "*password*" {send "${passwd}\n"} \ eof {wait} spawn ssh $host expect "*password*" {send "${passwd}\n"} send "echo Key $pub >> ${destpath}authorization\n" send "exit \n " expect eof wait spawn ssh $host expect "*Authentication successful*" {send "exit \n";wait;exit 0} \ "*password*" {close;exit 2}
相关阅读 更多 +