笔记:macOS 配置服务器 SSH key-based 登录


 拍摄于 2017-12-02,藕
拍摄于 2017-12-02,藕

步骤以及准备

大致步骤可以分为四段,一步一步来:

  1. 本地,首先为 test_user 生成新的私钥和公钥;
  2. 本地,将公钥上传到服务器;
  3. 服务器,编辑 SSH 配置文件;
  4. 本地,编辑 SHH 相关配置文件,实现快捷登陆

以下笔记里具体会以一个 test_user 的身份记录,可以使用如下命令新建,新建完毕之后断开与服务的连接 by exit 命令,接着再使用 test_user 身份来连接服务器。


第一步:本地,首先为 test_user 生成新的私钥和公钥

首先第一步是在本地为 test_user 生成新的私钥和公钥。

根据终端中的提示,分别填入 passphrase 和保存位置路径: /User/<username>/.ssh/test_user。这里没有使用默认 id_rsa 作为目标文件名,而是为 test_user 单独建立公钥和私钥。


第二步:本地,将公钥上传到服务器

ssh-copy-id 命令

如果过去也是使用 scp 命令进行公钥文件的上传,完成之后再进行重命名、合并、修改文件及文件夹权限等操作的话,那么 ssh-copy-id 的方法会显得分外简单,一句结束、完成所有需要的操作:

第二条命令是测试链接的操作,测试的时候应该会首先提示输入 passphrase,如果输入完毕之后仍旧提示需要输入密码,可以查看下文中关于配置那一节。

对比过去使用的 scp 命令

笔记开头就提到的使用 scp 命令上传公钥、新建、设置文件文件夹权限的操作在这里也一并记录一下,对比可见 ssh-copy-id 是多简洁高效。

首先需要在本地将 .pub 公钥文件上传到服务器:

接下来,要确保以 test_user 的身份登陆服务器,其次需要判断 .ssh 文件夹是否存在?不存在的时候需要新建,保证 .ssh 文件夹是 700 权限,而 authorized_keys 是 600 权限。如果已经存在则 cat 新的 .pub 到现有的 authorized_keys 之中,同时也需要保证文件、文件夹的对应权限。


第三步:服务器,编辑 SSH 配置文件

到了这一步,可能断开(exit)之后重新登陆没有达到预期的效果,比如以如下方式直接访问远程服务器,除了提示需要输入秘钥的 passphrase 之外,仍然会会提示需要再次输入 test_user 的登录密码,或者每次登陆都提示需要输入秘钥的 passphrase。

这里需要编辑 SSH 的配置文件,因为默认「使用公钥秘钥登陆服务器」的选项 PubkeyAuthentication 可能默认没有开启,而指定具体秘钥位置的 AuthorizedKeysFile 是被注释的状态。两者具体的位置在 /etc/ssh/sshd_config,使用 nano、vi 等打开编辑,确保前者是开启状态,而后者的位置也指向正确。


第四步:本地,编辑 SSH 相关配置文件,实现快捷登陆

最后的一步是简化登陆步骤,比如说你很多服务器,对应很多 IP,每次需要登陆一个就需要去查一下具体 IP 地址是多少,是不是很烦,这里 ssh 为我们提供了为不同域名(IP)设置别名以致可以快速登陆的办法,牵扯到两个文件:

  1. 系统全局设置 SSH 的配置文件,路径:/etc/ssh/ssh_config/etc/ssh/sshd_config;
  2. 用户自定义的 SSH 配置文件,默认没有,但是文件需要被指定在: ~/.ssh/config

系统全局的配置文件不需要做改动是加上 这里主要创建、编辑用户自定义文件 ~/.ssh/config,比如说 test_user 的服务器叫做 example.com 或者直接 IP 地址:12.34.56.78,那么就可以在 ~/.ssh/config 写入如下这样一条规则:

有可能会需要重启 macOS 本地的 ssh 服务来让 config 生效:

这样,在一切配合正确的情况下,以后在终端中输入 ssh ExampleHost 就可以直接登录到远程服务器(第一次会要求输入秘钥的 passphrase)。

参考

关于 macOS 上 ssh-add 和 ssh-agent

寻找解决方案一顿乱查乱试的时候,有成功使用 ssh-add 命令在本地添加秘钥,而得以不需要反复输入 passphrase 的时候,但貌似就成功了一次,后来想起来 Github 有官方的指导说明文档《Connecting to GitHub with SSH》中的这一部分《Adding your SSH key to the ssh-agent》翻了一下才知道 macOS 10.12 需要在配置文件中写入 AddKeysToAgent yes 才能成功将 key 加入 ssh-agent,后者 UseKeychain yes 则可以在这里调用 macOS 下的 keychain 来记录秘钥的 passphrase。相关的 issue 和 repo:

  1. Mac OS X 10.12: ssh-agent does not automatically load passphrases on the keychain during startu
  2. Saving SSH keys in macOS Sierra keychain

其他

  1. SSH Config File
  2. ssh_config(5) - OpenBSD manual pages
  3. Best way to use multiple SSH private keys on one client
  4. What is the best practice: separate ssh-key per host and user VS one ssh-key for all hosts?
  5. ssh-keygen 中文手册
  6. 7 Default OpenSSH Security Options You Should Change in /etc/ssh/sshd_config
  7. Permission denied (publickey,password)
  8. How to avoid being asked passphrase each time I push to Bitbucket
  9. .ssh/id_rsa failed: permission denied
  10. Convince apt-get not to use IPv6 method
  11. SSH原理与运用(一):远程登录
  12. SSH原理与运用(二):远程操作与端口转发
  13. Use Public Key Authentication with SSH

感谢阅读

你们好, 2018 年初把小站从 Jekyll 迁移到 Hugo 的过程中,删除了评论区放的 Disqus 插件,考虑有二:首先无论评论、还是对笔记内容的进一步讨论,读者们更喜欢通过邮件、或者 Twitter 私信的方式来沟通;其次一年多以来 Disqus 后台能看到几乎都是垃圾留言(spam),所以这里直接贴一下邮件、以及 Twitter 账户 地址。

技术发展迭代很快,所以这些笔记内容也有类似新闻的时效性,不免有过时、或者错误的地方,欢迎指正 ^_^。

BEST
Lien(A.K.A 胡椒)
本站总访问量 本站总访客量 本文总阅读量