SSH是一种安全通道协议,主要用来远程登录。在RHEL 5系统中使用的是OpenSSH服务器由openssh, openssh-server等软件包提供的(默认已经安装),并以将sshd添加为标准的系统服务。使用方法如下:
$ ssh host
$ ssh username@host
$ ssh -p 222 username@host
-p:指定访问端口;如果省略该参数,则默认访问SSH服务的默认端口22;
如果是第一次登录对方主机,则系统会出现一下提示:
The authenticity of host 'host(192.168.0.21)' can't be established.
RSA key fingerprint is 98:2e:d7:e0:de:9f:ac:67:28:c2:42:2d:37:16:58:4d.
Are you sure you want to continue connecting (yes/no)?
这段话是说,无法确认host主机的真实性,只知道它的公钥指纹,问你还想继续连接吗?
输入yes之后,系统会出现一句提示,表示host主机已经得到认可。
Warning: Permanently added 'host,192.168.0.21' (RSA) to the list of known hosts.
然后要求输入秘密:
$ Password: (enter password)
此时,如果秘密正确,就可以登录了。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
在信任环境下,如果每次远程登录时,都要输入密码,感觉太浪费时间了,尤其是密码很复杂、 维护的服务器比较多的情况下。
于是有了正常需求:不用输入密码即可实现远程登录。
实现步骤如下:
1、本地生成一对秘钥文件(公钥和私钥);
$ ssh-keygen
#以上命令等价于 ssh-keygen -t rsa
#-t:指定密钥的类型,默认为SSH-2 的rsa类型;
运行上面的命令后,系统会出现一系列提示,可以一路回车。特别说明,其中有一个问 题是,要不要对私钥设置口令(passphrase),如果担心私钥的安全,可以设置一个。运 行结束以后,会在 ~/.ssh/ 目录下新生成两个文件:id_rsa.pub和 id_rsa。前者公钥,后者是私钥。
2、将公钥传送到远程主机host上面;
$ ssh-copy-id user@host
经过以上两步之后,就可以实现无密码远程登录了(远程主机将用户的公钥保存在~/.ssh/authorized_keys 文件中)。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
常见问题:
1、生成密钥并上传至远程主机后,仍然无法实现无密码登录?
打开远程主机的 /etc/ssh/sshd_config 这个文件,以下几行取消注释。
#RSAAuthentication=yes
#PubkeyAuthentication=yes
#AuthorizedKeysFile=.ssh/authorized_keys
然后,重启远程主机的ssh服务。
#ubuntu系统
$ service ssh restart
#debian系统
$ /etc/init.d/ssh restart
2、执行ssh-copy-id 命令时,远程服务器的SSH服务端口不是22,如下:
$ ssh-copy-id nameB@machineB
ssh: connect to host machineB port 22: Connection refused
则使用如下命令:
$ ssh-copy-id "-p 22000 nameB@machineB"