SSH是Secure Shell的缩写,是一种网络通讯协议。
这里所谓的secure(安全)是相对于ftp、pop3、telnet等这类以明文传输密码的通讯协议来说的。
通过telnet
命令可以知道服务器是否支持SSH协议,以及SSH协议的版本。
$ telnet hostname 22 ... SSH-1.99-OpenSSH_3.9p1 exit
SSH协议对应的端口是22。上面例子的输出表明使用的是OpenSSH的SSH-1。除了SSH-1,还有SSH-2版本。
这和telnet类似。用户通过用户名和密码登录。缺点主要是两点:
用户创建一对密钥:
这样一来,用户登录一台机器时,就不再需要自己的帐户密码了。服务器通过登录用户名找到对应的Public Key,并用此密钥核对客户端的身份。
对于放置在服务器端的公有密钥来说,其通常保存在文件~/.ssh/authorized_keys
中。每行一个公有密钥。 其格式大致如下:
ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAIEAuMjglYIJMVFQ... rsa-key-20120426
三个字段分别表示加密方法、密钥内容、标识字符串(可选)。
客户端的Private Key一般通过一个口令(passphrase)加密存储以保证安全,在使用时需要先用这个口令对密钥进行解密。通常由客户端软件提示输入口令。
在linux系统中,可以用命令ssh-keygen
生成密钥对。
在Windows系统中,使用putty的话,可以用PuttyGen
程序生成。
Host Fingerprint(机器指纹)的主要用途是防范中间人攻击。
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY! Someone could be eavesdropping on you right now (man-in-the-middle attack)! It is also possible that the RSA host key has just been changed. The fingerprint for the RSA key sent by the remote host is 25:8f:d7:01:1d:2d:de:30:db:42:ba:c3:28:0c:33:5b. Please contact your system administrator. Add correct host key in /home/$user/.ssh/known_hosts to get rid of this message. Offending key in /home1/$user/.ssh/known_hosts:5 Host key verification failed.
如果确认是安全的,修复的办法是删除相应的行(Offending key ...行显示了文件和行号)。
可以借助sed命令: sed -i '5d' ~/.ssh/known_hosts
。
也可以通过指定不检查host来跳过该问题(不建议): ssh -o 'StrictHostKeyChecking no' user@host