SSH 免密登录远程主机

开发过程中经常需要通过SSH协议登录到服务器做一些部署测试环境、查看日志等操作,需要记住很多服务器的账号和密码。密码设置的太简单了,不安全;密码设置的太复杂了,记不住。我也曾经通过印象笔记等软件维护过服务器的账号和密码,查看密码还是很麻烦,有没有什么简单的方法呢?

相信大家都使用过Git以及Github,不知道你是否还记得,你曾经在本地使用ssh-keygen生成一对秘钥,然后将公钥(~/.ssh/id_rsa.pub)添加到Github网站上,在这个操作之前,每次提交代码都需要输入密码,烦不胜烦。

看到这里,你是不是也在想,同样是SSH协议,登录服务器应该也可以做到免密。答案是肯定的。以下我将介绍如何实现通过SSH协议免密登录服务器。

  1. 检查秘钥是否存在,如果存在请直接进入第 3 步,如果不存在请进入第 2 步。
    如果你以前在当前电脑上开发过项目,提交过代码,一般都已经成了秘钥。你也可以通过ls ~/.ssh命令可以检查秘钥是否已经生成,比如在我的电脑上执行该命令打印出id_rsa id_rsa.pub known_hosts,而id_rsaid_rsa.pub正是一对私钥公钥。

  2. 生成秘钥
    通过ssh-keygen可以生成一对秘钥。这是一个交互式命令,需要你回答几个问题,不过不要担心,一般你只需要一路回车即可。

  3. 将公钥添加到远程主机中
    ssh-copy-id命令可以把本地主机的公钥复制到远程主机的authorized_keys文件中,它还会给远程主机的用户主目录和~/.ssh, 和~/.ssh/authorized_keys设置合适的权限。

    1
    ssh-copy-id -i ~/.ssh/id_rsa.pub user@server

大功告成,现在你再通过ssh user@server登录服务器时就不需要输入密码了,是不是很方便呢?