ubuntu安装使用ssh
SSH 是
Secure Shell
的缩写,是建立在应用层基础上的安全协议。SSH 是较可靠,专为远程登录会话和其他网络服务提供安全性的协议。关于 SSH 的更多知识,推荐图解SSH原理
Linux 上的 SSH 分为客户端openssh-client
和服务端openssh-server
。服务端用于提供 SSH 服务,客户端用于登录到远程SSH 服务,通常会按需安装。
1. 安装 SSH
sudo apt-get install openssh-server openssh-client
2. 开启 SSH 服务
2.1 启动 SSH 服务
查看 SSH 服务状态。
ps -e|grep ssh
输出内容中包含类似内容4493 ? 00:00:00 sshd
则 SSH 服务处于运行状态,否则需要启动 SSH 服务:
sudo /etc/init.d/ssh start
2.2 配置 SSH
ssh-server
的配置文件位于/etc/ssh/sshd_config
。可以通过配置文件指定 SSH 服务的端口(默认22
),修改端口号和禁止root
登录等措施可以规避部分恶意攻击风险。更多关于sshd_config
的参考。
修改配置后要重启 SSH 服务才能生效。
sudo vim /etc/ssh/sshd_config
sudo /etc/init.d/ssh restart
端口号配置:
Port 22
禁止root
登录:PermitRootLogin no
至此,已经可以使用账号密码登录到 SSH 服务了。需要注意的是,如果禁用了root
登录,就需要新建linux
用户或使用已有的非root
用户远程登录到 SSH 服务。
2.3 远程登录 SSH
在Linux
系统中连接 SSH 服务的最简单方法是使用openssh-client
,上文已经安装过,不再赘述。连接 SSH 服务的命令如下
ssh user@host
user
和host
分别是远程服务的用户名和host
(可以直接是IP,也可以是已知的域名),初次连接会出现如下提示,输入yes
并敲下回车键后会被断开连接。再次输入连接命令,接着输入密码连接即可。
The authenticity of host '192.168.12.30 (192.168.12.30)' can't be established.
ECDSA key fingerprint is SHA256:IPAerZeGGaXmgxhVdWBDSu61SqDF8SLjREqZli9KZ/Y.
Are you sure you want to continue connecting (yes/no)?
3 配置秘钥登录
秘钥登录的好处是免输密码,且安全!本次示例的场景是用client
服务器的userc
用户,通过密钥登录到server
服务器的users
用户。
先明确两端的操作:
server
端操作- 修改
sshd_config
配置文件以支持密钥登录
- 修改
client
端操作- 生成秘钥对:
userc@client:~$ssh-keygen -t rsa
- 把
client
的公钥上传到server
,并指定users
用户:userc@client:~$ssh-copy-id users@server-host
。client
的公钥就被追加写入到server
服务器users
用户的~/.ssh/authorized_keys
文件中了
- 生成秘钥对:
3.1 server
端操作
3.1.1 修改sshd_config
配置文件以支持密钥登录
users@server:~$sudo vim /etc/ssh/sshd_config
找到以下两行,把前面的#
删除以取消注释:
# PubkeyAuthentication yes
# AuthorizedKeysFile .ssh/authorized_keys .ssh/authorized_keys2
PubkeyAuthentication yes
:开启密钥验证
AuthorizedKeysFile
:密钥存放的文件为登录用户目录下的.ssh/authorized_keys
3.2 client
端操作
3.2.1 生成密钥对
ssh-keygen
是用于生成秘钥的命令:
- -t:指定生成密钥类型(rsa、dsa、ecdsa等),默认
rsa
- -P:指定passphrase,用于确保私钥的安全
- -f:指定存放密钥的文件(公钥文件默认和私钥同目录下,不同的是,存放公钥的文件名需要加上后缀.pub)
本文用最简单的命令生成秘钥:
userc@client:~$ssh-keygen
生成秘钥过程中有几次交互:
- Enter file in which to save the key (/home/userc/.ssh/id_rsa): 指定保存秘钥的文件,默认
/home/userc/.ssh/id_rsa
- Enter passphrase (empty for no passphrase): 输入密码,可以为空
- Enter same passphrase again: 确认密码
接着会输出两行内容,告诉我们秘钥对保存的位置。
Your identification has been saved in /home/userc/.ssh/id_rsa.
Your public key has been saved in /home/userc/.ssh/id_rsa.pub.
使用ls -l .ssh/
命令查看生成的秘钥文件:
总用量 8
-rw------- 1 userc userc 1823 3月 17 11:44 id_rsa
-rw-r--r-- 1 userc userc 394 3月 17 11:44 id_rsa.pub
- id_rsa:保存私钥的文件
- id_rsa.pub:保存公钥的文件
3.2.2 上传公钥
把公钥上传到server
,并指定users
用户:
userc@client:~$ssh-copy-id users@server-host
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
The authenticity of host 'server-host (server-host)' can't be established.
ECDSA key fingerprint is SHA256:***.
Are you sure you want to continue connecting (yes/no)? yes
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
users@server-host's password:
Number of key(s) added: 1
Now try logging into the machine, with: "ssh 'users@server-host'"
and check to make sure that only the key(s) you wanted were added.
ssh-copy-id
命令可以通过-p
参数指定端口号。
系统提示是否确定要把密文为SHA256:***
的秘钥添加到指定主机,确认后输入yes
继续。接着输入users
的密码,会显示上传结果Number of key(s) added: 1
,然后根据提示用ssh 'users@server-host'
命令进行验证。终端输出以Welcome to
开头的内容就表示登录成功了(下文演示隐藏了部分隐私信息):
userc@client:~$ssh 'users@server-host'
Welcome to Deepin 20.1 GNU/Linux
* Homepage:https://www.deepin.org/
* Bugreport:https://bbs.deepin.org/
Last login: Wed Mar 17 **:**:** 2021 from *.*.*.*
users@server:~$
登录成功后直接输入
cat .ssh/authorized_keys
命令查看server
端的公钥,会发现其中包含client
端生成的公钥。
此时查看client
端.ssh
文件夹下内容,会发现多出来一个known_hosts
文件。此文件的作用在图解SSH原理一文中有介绍,本文不再赘述。