如何在终端中存储SSH凭据


33

我是MacBook的新手,正在运行El Capitan。

我正在将机器使用情况从PC迁移到MacBook。我是PC上PuTTY和SuperPuTTY的长期用户。

我想在MacBook Terminal中创建登录凭据并将其保存到Web服务器,就像在PC上的SuperPuTTY中所做的一样。

是否可以在Mac Terminal中保存Web服务器登录凭据?

这是我的总体目标:

我想知道Mac Terminal中是否有一种简单的方法来存储以下命令行登录凭据,然后使用某种短代码通过Terminal连接到我的Web服务器:

ssh -p 2200 root@123.456.789.012
Password: ****************************************************************

我管理并连接到5个不同的Web服务器,因此以短/快速连接方法整理和组织登录凭据将节省大量时间。尤其是因为我的密码是64个字符的字符串。


我已清除评论,因为Tammy的编辑版本3出于清晰度和实用性而将其从公园中淘汰了。做得好!
bmike

Answers:


50

您可以将公用密钥复制到远程计算机。只要它们启用了公共密钥身份验证,并且您的公共密钥存在于远程计算机上,您就可以ssh访问计算机而无需提供密码。

首先,您需要生成一个公用/专用密钥对,如下所示:

ssh-keygen -t rsa

按照提示进行操作。当询问是否要使用密码保护密钥时,请说是!不对密钥进行密码保护是不明智的做法,我将向您展示如何只需要偶尔输入一次密码。

如果您已经有密钥对,则可以跳过上述步骤。

现在,假设您的ssh密钥在Mac上以形式存在~/.ssh/id_rsa.pub,则可以通过运行以下命令将其安装在远程计算机上:

cat ~/.ssh/id_rsa.pub | ssh user@123.45.56.78 "mkdir -p ~/.ssh && cat >>  ~/.ssh/authorized_keys"

对于上面引用的特定服务器示例,命令如下所示:

cat ~/.ssh/id_rsa.pub | ssh -p 2200 root@123.456.789.012 "mkdir -p ~/.ssh && cat >>  ~/.ssh/authorized_keys"

您必须输入密码root@123.456.789.012才能执行此复制,但这应该是您最后一次执行此操作。假设远程服务器sshd已设置为执行公私钥身份验证,那么现在当您ssh到该框时,它不应该要求您提供该root帐户的密码-而是将要求您提供该密钥的密码。请继续阅读,以了解如何始终不需要输入这些内容。

对于要使用密钥而不是密码登录的每台计算机,重复上述操作。

请注意,任何拥有您~/.ssh/id_rsa文件的人都可以通过ssh进入该计算机,root而无需提供远程计算机的密码。保护密钥文件的密码可确保他们需要知道该密钥的密码才能使用它。确保该文件是安全的。在Mac上使用磁盘加密,并保持文件和~/.ssh/目录的权限严格。

为了使您不必每次都输入密码即可更轻松地使用密钥,OS X ssh-agent在计算机的后台运行一个进程。该代理将在您第一次使用密钥对时对其进行缓存,因此您只需要偶尔输入一次密码即可。如果您仅使Mac处于睡眠状态,而从不重启它,则可以长时间输入密码而无需输入密码。

您可以ssh-agent通过运行以下命令来预缓存所有SSH密钥:

ssh-add

现在,您只需要记住密钥密码,而不需要记住许多其他帐户密码。我通常将关键密码保存在1Password中(无从属关系),从而进一步简化了我需要记住的密码数量。然后,我只是在1Password中查找它们,然后在终端重新启动Mac并导致运行ssh-agent重新开始的奇怪时间在它们中剪切并粘贴它们。

如果在此问题中使用Terminal.app连接管理解决方案结合将密钥复制到远程计算机,则将获得非常接近PuTTY的GUI连接体验。


在服务器端,检查/etc/ssh/sshd_config并确保:

PubkeyAuthentication yes

已在配置中启用(在OpenSSH中默认为启用)。您可能还希望设置:

PasswordAuthentication no

当您在那里时,将禁用基于密码的身份验证,并且密钥成为访问计算机的唯一方法。

如果对配置文件进行任何更改,则需要在计算机上重新启动sshd。


谢谢@IamC-这个答案很好,我敢肯定会奏效。今天早上我创建了一个堆栈外汇账户这里的MAC信道,看是否能找到一个快速简便的方式来保存在终端或Mac上莫名其妙的登录凭据。这样做似乎非常复杂,但对我来说不是一个可行的解决方案。原因如下:<more>
tammy 2015年

<续>我可以通过命令行访问许多Web服务器(总共5台)。我在工作办公室中有一台台式机,可以通过SSH(通过PuTTY)访问这些Web服务器。我在家庭办公室中有一台大型笔记本电脑,可以通过SSH(通过PuTTY)访问这些Web服务器。我刚刚购买了MacBook Air,用于旅行和现场客户拜访。它是满足特定需求的完美选择。我希望通过PC上的PuTTY和SuperPuTTY尽可能轻松地实现到服务器的SSH连接。<more>
tammy 2015年

<继续>但是我不能走公共认证密钥的路线,因为我需要改变PuTTY在我的家庭和办公室PC上的工作方式。使Mac像我的PC一样工作已经变得艰巨,所以我认为我只需要坚持从Mac连接的复制和粘贴过程。谢谢您的帮助。非常感谢您帮助我简化流程。
tammy 2015年

2
@tammy,您可以保留PasswordAuthentication yes在服务器端,PuTTY将继续像在Windows计算机上一样正常运行。这不是一种选择,您可以在服务器上同时允许两种身份验证。PuTTY还支持像FWIW这样的公/私钥授权。您可以将~/.ssh/id_rsa*文件复制到Windows计算机,然后将其导入PuTTY,以对服务器进行身份验证。腻子,引擎盖下,使用完全相同的OpenSSH库连接作为ssh在OS X
伊恩C.

1
ssh-add即使在Sierra(OS X 10.12)中仍然可以使用。谢谢
SaxDaddy

4

您可以使用sshpass来保存密码,而不必每次都插入,这不是一个好习惯(安全问题)。

按照以下说明安装Mac OS X:https : //gist.github.com/arunoda/7790979

安装sshpass后,运行 sshpass -p "YOUR_PASSWORD" ssh -o StrictHostKeyChecking=no root@123.456.789.012:2200

对5台Web服务器执行相同的操作,而无需每次都插入密码。


1
我觉得这太愚蠢了。我猜想使用带有PuTTY和SuperPuTTY的PC会使我与基本命令行的距离太远。我根据总体目标编辑了OQ。看一看。
tammy 2015年

我现在假设您可以连接到root@123.456.789.012,而只是想自动化该过程。基本上,你不想每次都输入ssh -p 2200 root@123.456.789.012Password: **********************
恩佐2015年

ssh-copy-id不是标准OS X发行版的一部分。
伊恩·C(

@IanC。我想我忘了我是用brew安装的。会修改我的答案
恩佐2015年

你知道了@maetsoh-这正是我想要在这里实现的目标。
tammy 2015年

1

除了公用/专用密钥外,.ssh / config文件还可以配置为简化ssh命令的使用,例如别名,每个服务器的默认用户/端口,ssh选项,代理命令...

基本上,您可以在ssh命令中添加的任何复杂内容也可以在此文件中。


0

我已经将Putty作为本机应用程序包移植到Mac,因此如果您不是技术用户,则不需要macports或终端。

有关屏幕截图的更多信息,请访问:http : //www.wine-reviews.net/2016/08/putty-for-mac-os-x-now-available.html

干杯,


欢迎询问不同!请务必直接回答问题。如果我提到您正在使用的产品,那很好,但是请尽量成为话题,而不是将相同的营销宣传贴在多个帖子上。
bmike
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.