如何在Linux/Unix系统上设置SSH密钥
如何在基于Linux或Unix的系统上设置SSH密钥?
在用于Linux/Unix的SSH中,如何设置公共密钥身份验证?
SSH密钥提供了一种登录Linux和Unix服务器的安全方法。
本教程说明了公共密钥,并向您展示了如何在Linux或类似Unix的服务器上设置SSH密钥。
我假设您正在使用带有以下软件的Linux或类Unix服务器和客户端:
- OpenSSH SSHD服务器
- Linux上的OpenSSH ssh客户端和朋友(Ubuntu,Debian,{Free,Open,Net} BSD,RHEL,CentOS,MacOS/OSX,AIX,HP-UX和co)。
什么是公钥认证?
OpenSSH服务器支持各种身份验证架构。
最受欢迎的两个如下:
- 基于密码的身份验证
- 基于公钥的身份验证。它是使用密码的另一种安全方法。建议在VPS,云,专用甚至家庭服务器上使用此方法。
如何设置SSH密钥
设置安全ssh密钥的步骤:
- 使用
ssh-keygen
命令创建ssh密钥对。 - 在Linux或Unix服务器上使用" ssh-copy-id"命令复制并安装公共ssh密钥。
- 将您自己添加到sudo或wheel组管理员帐户。
- 禁用root帐户的密码登录。
- 使用
ssh user @ server-name
命令测试少用SSH密钥登录的密码。
让我们详细了解所有步骤。
如何设置公钥认证?
您必须同时生成一个公钥和一个私钥对。
我们的服务器设置如下:
- server1.theitroad.local您将公用密钥存储在远程主机上,并且在此基于Linux/Unix的服务器上拥有一个帐户。
- client1.theitroad.local您的私钥位于用于连接到server1.theitroad.local服务器的台式机/笔记本电脑/计算机(或本地服务器)上。请勿共享或将您的私人文件提供给任何人。
使用基于公共密钥的方法,您可以登录到远程主机和服务器,并将文件传输到它们,而无需使用您的帐户密码。
随意用您的实际设置替换server1.theitroad.local和client1.theitroad.local名称。
聊够了,让我们设置公钥身份验证。
如果.ssh目录不存在,请打开终端并执行以下命令:
mkdir -p $HOME/.ssh chmod 0700 $HOME/.ssh
1:创建密钥对
在计算机上(例如client1.theitroad.local),为协议生成密钥对。
ssh-keygen -t rsa
输出示例:
Generating public/private rsa key pair. Enter file in which to save the key (/Users/Hyman/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /Users/Hyman/.ssh/id_rsa. Your public key has been saved in /Users/Hyman/.ssh/id_rsa.pub. The key fingerprint is: 80:5f:25:7c:f4:90:aa:e1:f4:a0:01:43:4e:e8:bc:f5 Hyman@desktop01 The key's randomart image is: +--[ RSA 2048]----+ | oo ...+. | |.oo . .ooo | |o .o. . .o . | | o ...+o. | | o .=.=S | | . .Eo . | | | | | | | +-----------------+
您需要设置密钥对的位置和名称。
如果那里没有其他密钥,建议您使用默认位置,例如:$HOME/.ssh/id_rsa。
系统将提示您提供私钥的密码(密码)。
我建议您在出现提示时设置密码。
您应该在$HOME/.ssh /目录中看到两个新文件:
- $HOME/.ssh/id_rsa包含您的私钥。
- $HOME/.ssh/id_rsa.pub包含您的公共密钥。
高级用户的可选语法
以下语法指定要创建的RSA密钥中的4096位(默认值2048):
$ ssh-keygen -t rsa -b 4096 -f ~/.ssh/vps-cloud.web-server.key -C "My web-server key"
其中:
- -t rsa:指定要创建的密钥的类型。协议版本1的可能值为rsa1,协议版本2的可能值为dsa,ecdsa,ed25519或rsa。
- -b 4096:指定要创建的密钥中的位数
-f~/.ssh/vps-cloud.web-server.key
:指定密钥文件的文件名。- -C"我的Web服务器密钥":设置一个新注释。
2:将公钥安装在远程服务器中
使用scp或ssh-copy-id命令将公用密钥文件(例如$HOME/.ssh/id_rsa.pub)复制到远程服务器/主机上的帐户(例如[email protected])。
为此,请在client1.theitroad.local上输入以下命令:
ssh-copy-id -i $HOME/.ssh/id_rsa.pub [email protected]
或者只是将远程服务器中的公钥复制为~/.ssh /目录中的authorized_keys:
scp $HOME/.ssh/id_rsa.pub [email protected]:~/.ssh/authorized_keys
关于在远程服务器上追加公钥的注意事项
在某些系统上,可能未安装" ssh-copy-id"命令,因此请使用以下命令(在提示时提供名为Hyman的远程用户帐户的密码)来安装和追加公共密钥:
## First create .ssh directory on server ## ssh [email protected] "umask 077; test -d .ssh || mkdir .ssh" ## cat local id.rsa.pub file and pipe over ssh to append the public key in remote server ## cat $HOME/.ssh/id_rsa.pub | ssh [email protected] "cat >> .ssh/authorized_keys"
3:对其进行测试(在client1.theitroad.local上执行命令)
ssh命令的语法如下:
ssh [email protected] ssh user@your-server-ip-address ssh -i ~/.ssh/your-key user@your-server-ip-address
或复制一个名为foo.txt的文本文件:
scp foo.txt [email protected]:/tmp/
系统将提示您输入密码。
要在每次登录远程主机时解决口令,请尝试使用ssh-agent和ssh-add命令。
什么是ssh-agent和ssh-add,如何使用它们?
要解决当前会话的密码,请将密码添加到ssh-agent,当使用ssh或scp/sftp/rsync通过公共密钥连接到主机时,不会提示您输入密码。
语法如下:
eval $(ssh-agent)
输入ssh-add命令以提示用户输入私钥密码,并将其添加到ssh-agent命令维护的列表中:
ssh-add
输入您的私钥密码。
现在,再次尝试登录到[email protected],将不会提示您输入密码:
ssh [email protected]
可以使用-L选项列出所有身份的公钥参数:
ssh-add -L
可以使用-D选项从ssh-agent删除所有私钥,如下所示:
ssh-add -D
注销注销ssh代理后,运行:
kill $SSH_AGENT_PID
您还可以在shell启动中添加如下内容,以在注销时杀死ssh-agent:
trap "kill $SSH_AGENT_PID" 0
4:在服务器上禁用基于密码的登录
登录到您的服务器,执行:
## client commands ## eval $(ssh-agent) ssh-add ssh [email protected]
使用文本编辑器(例如nano或vim)在server1.theitroad.local上编辑/etc/ssh/sshd_config:
警告:确保将自己添加到sudoers文件中。
否则,您以后将无法以root用户身份登录。
有关更多信息,请参见如何在FreeBSD服务器上向用户添加,删除和授予Sudo特权。
$ sudo vim /etc/ssh/sshd_config
或者使用vim文本编辑器直接跳转到PermitRootLogin行:
$ sudo vim +/PermitRootLogin /etc/ssh/sshd_config
找到PermitRootLogin并将其设置如下:
PermitRootLogin no
保存并关闭文件。
我将在Ubuntu Linux上将一个名为Hyman的用户添加到sudoers中:
# adduser Hyman
最后,重新加载/重新启动sshd服务器,根据您的Linux/Unix版本执行命令:
## CentOS/RHEL/Fedora (older version) Linux server reload sshd ## sudo service sshd reload ## CentOS/RHEL/Fedora (latest version i.e. systemd based) Linux server reload sshd ## sudo systemctl reload sshd ## Debian/Ubuntu Linux (older version) server reload sshd ## sudo /etc/init.d/ssh reload ## Debian/Ubuntu Linux (systemd based latest) server reload sshd ## sudo systemctl reload ssh ## Generic Unix method to reload sshd ## sudo kill -HUP `cat /var/run/sshd.pid` OR sudo kill -HUP $(cat /var/run/sshd.pid)
5:如何为现有私钥添加或替换密码短语?
要更改密码,请输入以下命令:
ssh-keygen -p
6:如何备份现有的私钥/公钥?
只需将文件复制到备份服务器或外部U盘/硬盘驱动器:
## Copy files to home based nas server ## rsync -avr $HOME/.ssh [email protected]:/path/to/encrpted/nas/partition/ ## Copy files to usb pen drive mounted at /mnt/usb ## cp -avr $HOME/.ssh/ /mnt/usb/backups/
如何保护我的ssh密钥?
- 始终使用强密码短语。
- 不要在网上任何地方共享您的私钥,也不要在不安全的云存储中存储私钥。
- 限制帐户的特权。