Overview

前些天用ssh通过命令行登录我们的bastion4服务器还一切正常,到了昨天已经不能使用,但是用了相同的密钥的FileZilla依然可以登录,这就很奇怪了。

1.问题所在

FileZilla登录到远程服务器,找到ubuntu用户下面的.ssh文件夹,打开之后可以看到只有一个文件authorized_keys,我把它下载下来。完成之后,我到本机的/home/young/Downloads文件夹里找到它,打开看到我的密钥已经添加进去了,看来是FileZilla可以找到本地/home/young/.ssh/BingjiaoYang_ssh这个文件,但是默认的

ssh ubuntu@bastion4.erc.monash.edu

命令现在已经找不到这个文件了。
经过JericoChris两个人的指点,使用如下命令:

ssh -vvv ubuntu@bastion4.erc.monash.edu

显示日志信息如下(只截取最后核心信息):

debug1: Next authentication method: publickey
debug1: Trying private key: /home/young/.ssh/id_rsa
debug3: no such identity: /home/young/.ssh/id_rsa: No such file or directory
debug1: Trying private key: /home/young/.ssh/id_dsa
debug3: no such identity: /home/young/.ssh/id_dsa: No such file or directory
debug1: Trying private key: /home/young/.ssh/id_ecdsa
debug3: no such identity: /home/young/.ssh/id_ecdsa: No such file or directory
debug1: Trying private key: /home/young/.ssh/id_ed25519
debug3: no such identity: /home/young/.ssh/id_ed25519: No such file or directory
debug2: we did not send a packet, disable method
debug1: No more authentication methods to try.
Permission denied (publickey).

意思就是找不到/home/young/.ssh/id_rsa这个文件。

2.解决办法

解决办法有如下两个。

2.1 文件改名(不推荐)

/home/young/.ssh/BingjiaoYang_ssh这个文件改名为id_rsa,同时把/home/young/.ssh/BingjiaoYang_ssh.pub这个文件改名为id_rsa.pub,这时候再用原命令登录就没有问题了。但是这个解决办法明显没有看透本质,所以推荐下一种。

2.2 直接指定密钥文件(推荐)

在命令行中直接输入ssh,可以看到ssh的用法:

➜  ~ ssh                                                                     
usage: ssh [-1246AaCfgKkMNnqsTtVvXxYy] [-b bind_address] [-c cipher_spec]
           [-D [bind_address:]port] [-E log_file] [-e escape_char]
           [-F configfile] [-I pkcs11] [-i identity_file]
           [-L [bind_address:]port:host:hostport] [-l login_name] [-m mac_spec]
           [-O ctl_cmd] [-o option] [-p port]
           [-Q cipher | cipher-auth | mac | kex | key]
           [-R [bind_address:]port:host:hostport] [-S ctl_path] [-W host:port]
           [-w local_tun[:remote_tun]] [user@]hostname [command]

可以看到,我们可以之间指定文件,来解决找不到文件的问题。所以,正确命令如下:

ssh ubuntu@bastion4.erc.monash.edu -i /home/young/.ssh/BingjiaoYang_ssh

以后就没有问题出现了。

还有一个问题有些人可能会困惑:为什么Filezilla仍然可以正常登录?
原因就在于,我们在首次用Filezilla登录时,会根据密钥文件生成一个BingjiaoYang_bastion4文件,以后Filezilla每次登录都会根据这个文件读取信息,一旦这个文件换了位置或者被删除,FileZilla一样会无法登录。
更多关于远程登录服务器的细节,参考Chris的文章:部署PhosphoPrediction
最后,感谢ChrisJerico的热心帮助。