Ubuntu/Debian Linux为OpenSSH安装Keychain SSH密钥管理器

时间:2020-01-09 10:45:34  来源:igfitidea点击:

如何安装钥匙串软件来管理在基于Debian或者Ubuntu的云服务器上运行的密钥? OpenSSH无需提供密码即可向远程系统提供RSA和DSA身份验证。钥匙串是ssh-agent的管理员。 由钥匙串启动的ssh-agent长时间运行,即使您从系统中注销,它也将继续运行。
但是,您可以控制此行为。
这对于您的shell和cron作业很有用,以使备份轻松共享单个ssh-agent进程。
从手册页:

当钥匙串运行时,它将检查正在运行的ssh-agent,否则将启动一个。
它将ssh-agent环境变量保存到~/.keychain/${HOSTNAME} -sh,以便后续的登录和非交互shell(例如cron作业)可以获取文件并建立无密码的ssh连接。
钥匙串支持大多数类似UNIX的操作系统,包括Cygwin。
它可以与Bourne兼容,csh兼容以及fishshell一起使用。

为Debian和朋友安装钥匙串

您可以在基于云的实例或者任何其他常规vps或者专用服务器的ssh会话上,通过命令行中的apt-get使用apt-get为OpenSSH安装密钥管理器。
以超级用户身份执行以下apt-get命令或者apt命令:

$ sudo apt-get install keychain

或者

# apt-get install keychain

输出示例:

Reading package lists... Done
Building dependency tree       
Reading state information... Done
Suggested packages:
  ssh-askpass
The following NEW packages will be installed:
  keychain
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Need to get 38.4 kB of archives.
After this operation, 85.0 kB of additional disk space will be used.
Get:1 http://deb.debian.org/debian stretch/main amd64 keychain all 2.8.2-0.1 [38.4 kB]
Fetched 38.4 kB in 0s (179 kB/s)
Selecting previously unselected package keychain.
(Reading database ... 24724 files and directories currently installed.)
Preparing to unpack .../keychain_2.8.2-0.1_all.deb ...
Unpacking keychain (2.8.2-0.1) ...
Processing triggers for man-db (2.7.6.1-2) ...
Setting up keychain (2.8.2-0.1) ...

如何设置公钥认证?

首先,使用mkdir命令创建一个名为$HOME/.ssh /的目录:

$ mkdir $HOME/.ssh/
$ chmod 0700 $HOME/.ssh/

执行以下命令之一以使用RSA(或者任何其他类型的密钥)加密在$HOME/.ssh /目录中生成您的公钥和私钥:

$ ssh-keygen

或者

$ ssh-keygen -t rsa -b 2048

或者

$ ssh-keygen -t rsa

在提示时分配密码。
您应该在$HOME/.ssh /目录中看到两个新文件:

  • $HOME/.ssh/id_rsa包含您的私钥。
  • $HOME/.ssh/id_rsa.pub包含您的公共密钥。

来自上述命令的示例会话:动画gif -01:SSH设置公共密钥身份验证演示

使用scp或者ssh-copy-id命令将您的公钥文件(例如,$HOME/.ssh/id_rsa.pub)复制到远程服务器/主机上的帐户(例如,[email protected]) )。
为此,请执行:

## [ warning this will overwrite existing file on the remote box ] ##
$ scp $HOME/.ssh/id_rsa.pub [email protected]:~/.ssh/authorized_keys

最好使用ssh-copy-id命令复制或者追加本地可用的密钥,以授权远程登录:

$ ssh-copy-id -i $HOME/.ssh/id_rsa.pub [email protected]

配置钥匙串

您需要使用诸如vi的文本编辑器来编辑名为$HOME/.bashrc或者~/.bash_profile的文件,运行:

$ vi $HOME/.bashrc

或者

$ vi $HOME/.bash_profile

添加/添加以下行:

#####################################################################################
### The --clear option make sure Intruder cannot use your existing SSH-Agents keys 
### i.e. Only allow cron jobs to use password less login 
#####################################################################################
/usr/bin/keychain --clear $HOME/.ssh/id_rsa
source $HOME/.keychain/$HOSTNAME-sh

或者

###########################################################################
# allow $USER to use keys. Only enter once and it will remain enabled till
# you delete it or reboot the server 
###########################################################################
/usr/bin/keychain $HOME/.ssh/id_rsa
source $HOME/.keychain/$HOSTNAME-sh

登录时,您将看到如下所示的钥匙串管理器,以便您的shell和cron作业可以共享一个ssh-agent进程:实际使用的钥匙串

如何测试无密码登录?

尝试登录到您的远程服务器:

$ ssh user@remote-box-name-here
$ ssh [email protected]
$ ssh [email protected] uptime
$ scp filename [email protected]:/path/to/dest

或者使用bash for loop测试更少的密码登录:

for i in cbz0{1..4} gfs0{1..4}
do
ssh $i uptime
done

输出示例:

12:48:54 up 32 days, 15:40,  1 user,  load average: 0.12, 0.13, 0.09
12:48:54 up 32 days, 15:39,  0 users,  load average: 0.04, 0.06, 0.01
12:48:54 up 32 days, 15:40,  0 users,  load average: 0.01, 0.03, 0.00
12:48:54 up 34 days, 20:11,  0 users,  load average: 0.25, 0.09, 0.02
12:48:55 up 34 days, 20:15,  0 users,  load average: 0.00, 0.01, 0.00
12:48:55 up 34 days, 20:09,  0 users,  load average: 0.02, 0.04, 0.00
12:48:55 up 34 days, 20:05,  0 users,  load average: 0.02, 0.06, 0.04
12:48:56 up 34 days, 19:58,  0 users,  load average: 0.00, 0.00, 0.00