机器Client的root和机器Server的root之间建立安全信任关系的步骤:
有时候使用scp命令时候,出现-bash: scp: command not found
解决方法:yum install openssh-clients 再运行scp就可以了。
1. 在机器Client上root用户执行ssh-keygen命令,生成建立安全信任关系的证书。
[root@Clientroot]# ssh-keygen -b 1024 -t rsa
Generatingpublic/private rsa key pair.
Enter file inwhich to save the key (/root/.ssh/id_rsa):
Enter passphrase(empty for no passphrase): <-- 直接输入回车
Enter samepassphrase again: <-- 直接输入回车
Youridentification has been saved in /root/.ssh/id_rsa.
Your public keyhas been saved in /root/.ssh/id_rsa.pub.
The key fingerprintis:
49:9c:8a:8f:bc:19:5e:8c:c0:10:d3:15:60:a3:32:1croot@Client
[root@Clientroot]#
注意:在程序提示输入passphrase时直接输入回车,表示无证书密码。
上述命令将生成私钥证书id_rsa和公钥证书id_rsa.pub,存放在用户家目录的.ssh子目录中。
2. 将公钥证书id_rsa.pub复制到机器Server的root家目录的.ssh子目录中,同时将文件名更换为authorized_keys。
[root@Client root]# scp -p .ssh/id_rsa.pub root@192.168.3.206:/root/.ssh/authorized_keys
root@192.168.3.206's password: <-- 输入机器Server的root用户密码
id_rsa.pub 100% |**************************| 218 00:00
[root@Client root]#
在执行上述命令时,两台机器的root用户之间还未建立安全信任关系,所以还需要输入机器Server的root用户密码。
经过以上2步,就在机器Client的root和机器Server的root之间建立安全信任关系。下面我们看看效果:
[root@Clientroot]# scp -p text root@192.168.3.206:/root
text 100%|**************************| 19 00:00
[root@Clientroot]#
成功了!真的不再需要输入密码了。
有可能发生的问题如下:
1)配置了本机(localhost)的ssh的公钥到authorized_keys文件中,但是在ssh连接localhost时仍然提示需要输入密码,后来发现是$HOME/.ssh/authorized_keys这个文件的权限问题引起的。其原因是,不能让所有者之外的用户对authorized_keys文件有写权限,否则,sshd将不允许使用该文件,因为它可能会被其他用户篡改。
命令行的演示如下:
View Code BASH
[hadoop@guest1~]$ cd .ssh/
[hadoop@guest1.ssh]$ ll
total16
-rw-rw-r--1 hadoop hadoop 395Jan1218:37 authorized_keys
-rw-------1 hadoop hadoop 1675Jan1218:36 id_rsa
-rw-r--r--1 hadoop hadoop 395Jan1218:36 id_rsa.pub
-rw-r--r--1 hadoop hadoop 796Jan608:40 known_hosts
#注意这里的authorized_keys文件的权限;这时该文件中的key是不起作用的。
#用chmod修改authorized_keys文件的权限
[hadoop@guest1.ssh]$ chmod g-w authorized_keys
[hadoop@guest1.ssh]$ ll
total16
-rw-r--r--1 hadoop hadoop 395Jan1218:37 authorized_keys
-rw-------1 hadoop hadoop 1675Jan1218:36 id_rsa
-rw-r--r--1 hadoop hadoop 395Jan1218:36 id_rsa.pub
-rw-r--r--1 hadoop hadoop 796Jan608:40 known_hosts
#修改后,sshd就可以正常使用authorized_keys文件了
[hadoop@guest1~]$ ssh localhost
Last login: SatJan1218:40:332013from localhost
[hadoop@guest1~]$ exit
logout
Connection to localhost closed.
[hadoop@guest1~]$
后来,我详细查了一下,如果authorized_keys文件、$HOME/.ssh目录或 $HOME目录让本用户之外的用户有写权限,那么sshd都会拒绝使用~/.ssh/authorized_keys 文件中的key来进行认证的。
2)有时候SSH登陆到别的Linux主机上去,但SSH登陆会被禁止,并弹出如下类似提示:
WARNING:REMOTE HOST IDENTIFICATION HAS CHANGED!@@@@@@@IT IS POSSIBLE THATSOMEONE IS DOING SOMETHING NASTY!Someone could be eavesdropping on you rightnow (man-in-the-middle attack)!It is also possible that the RSA host key hasjust been changed.The fingerprint for the RSA key sent by the remote hostis36:68:a6:e6:43:34:6b:82:d7:f4:df:1f:c2:e7:37:cc.Please contact your systemadministrator.Add correct host key in /u/xlian008/.ssh/known_hosts to get ridof this message.Offending key in /u/xlian008/.ssh/known_hosts:2RSA host key for135.1.35.130 has changed and you have requested strict checking.Host keyverification failed.
ssh会把你每个你访问过计算机的公钥(publickey)都记录在~/.ssh/known_hosts。当下次访问相同计算机时,OpenSSH会核对公钥。如果公钥不同,OpenSSH会发出警告,避免你受到DNS Hijack之类的攻击。
原因:一台主机上有多个Linux系统,会经常切换,那么这些系统使用同一ip,登录过一次后就会把ssh信息记录在本地的~/.ssh/known_hsots文件中,切换该系统后再用ssh访问这台主机就会出现冲突警告,需要手动删除修改known_hsots里面的内容。
有以下两个解决方案:
1. 手动删除修改known_hsots里面的内容;
2. 修改配置文件“~/.ssh/config”,加上这两行,重启服务器。
StrictHostKeyChecking no
UserKnownHostsFile /dev/null
优缺点:
1. 需要每次手动删除文件内容,一些自动化脚本的无法运行(在SSH登陆时失败),但是安全性高;
2. SSH登陆时会忽略known_hsots的访问,但是安全性低;
ssh无密码访问
http://my.oschina.net/u/736500/blog/140623
http://yangrong.blog.51cto.com/6945369/1390760
登陆验证方式:
1)密码验证:使用服务器中的用户名和密码方式登陆;
2)密钥对验证:要求提供相匹配的密钥信息才能通过,很安全。
vim /etc/ssh/sshd_config
PasswordAuthentication yes //启用密码验证
PubkeyAuthentication yes //启用密钥对进行验证
AuthorizedKeyFile .ssh/authorized_keys //指定公钥数据文件
使用ssh-keygen -t rsa在相应的用户目录下面生成公钥和私钥密钥。
ssh登陆到其他主机的错误
当我使用sshpass登陆到其他主机时,会报错
“root@IP's password: Permission denied, please try again.”
root密码无误。
iptables关闭。
sshd服务开启。
需要修改配置文件/etc/ssh/sshd_config的几个参数。
PasswordAuthentication yes
PermitRootLogin yes
UsePrivilegeSeparation no
重启sshd服务:
#/etc/init.d/sshd restart