SSH:修订间差异
无编辑摘要 |
无编辑摘要 |
||
(未显示同一用户的13个中间版本) | |||
第7行: | 第7行: | ||
===SSH服务器安装=== | ===SSH服务器安装=== | ||
====Linux==== | |||
一般服务器操作系统会默认安装SSH服务器,桌面操作系统则不会,如Ubuntu服务器版默认安装,Ubuntu桌面版未安装,需要下载安装,以Ubuntu系统安装OpenSSH Server为例: | 一般服务器操作系统会默认安装SSH服务器,桌面操作系统则不会,如Ubuntu服务器版默认安装,Ubuntu桌面版未安装,需要下载安装,以Ubuntu系统安装OpenSSH Server为例: | ||
<syntaxhighlight lang="bash" > | <syntaxhighlight lang="bash" > | ||
第14行: | 第15行: | ||
# 查看转态 | # 查看转态 | ||
sudo service status | sudo service sshd status | ||
</syntaxhighlight> | </syntaxhighlight> | ||
第21行: | 第22行: | ||
}} | }} | ||
=== | ====Windows==== | ||
使用 Windows 设置来安装 OpenSSH: | |||
*打开“设置”,选择“应用”>“应用和功能”,然后选择“可选功能” 。 | |||
*查找“OpenSSH 服务器”,再单击“安装” | |||
使用 PowerShell 安装 OpenSSH: | |||
<syntaxhighlight lang="PowerShell" > | |||
# 查找OpenSSH.Client, OpenSSH.Server组件 | |||
Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH*' | |||
# 安装 OpenSSH Server | |||
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0 | |||
# 启动 | |||
Start-Service sshd | |||
# 建议设置自动启动 | |||
Set-Service -Name sshd -StartupType 'Automatic' | |||
# 查看状态 | |||
get-Service sshd | |||
</syntaxhighlight> | |||
{{了解更多 | |||
|[https://learn.microsoft.com/zh-cn/windows-server/administration/openssh/openssh_install_firstuse Windows Server 文档:安装 OpenSSH] | |||
}} | |||
==快速入门== | |||
==SSH密码登录== | |||
操作系统一般都会自带ssh客户端OpenSSH,在[[Linux]]或[[Windows]]的命令行输入: | |||
<syntaxhighlight lang="bash" > | <syntaxhighlight lang="bash" > | ||
# SSH client版本 | # 查看 SSH client版本 | ||
ssh -V | ssh -V | ||
第31行: | 第61行: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
== | ===常见问题=== | ||
* 首次登录时出现“所选的用户密钥未在远程主机上注册”。 | |||
可以在服务器上查看密钥的指纹,对比两者是否相同,防止受到中间人攻击。 | |||
<syntaxhighlight lang="bash"> | |||
# 列出服务器ssh密钥文件 | |||
ls -al /etc/ssh/*pub | |||
=== | # 查看rsa密钥指纹 | ||
ssh-keygen -lf /etc/ssh/ssh_host_rsa_key.pub | awk '{print $2}' | |||
# 查看ECDSA密钥指纹 | |||
ssh-keygen -lf /etc/ssh/ssh_host_ecdsa_key.pub | awk '{print $2}' | |||
</syntaxhighlight> | |||
Windwos下: | |||
<syntaxhighlight lang="bat" > | |||
ls C:/ProgramData/ssh/ | |||
# 查看ECDSA密钥指纹 | |||
ssh-keygen -lf C:/ProgramData/ssh/ssh_host_ecdsa_key.pub | |||
# 查找全部 | |||
ssh-keyscan localhost | ssh-keygen -lf - | |||
</syntaxhighlight> | |||
==SSH密钥登录== | |||
=== 生成公钥和私钥 === | |||
在本地电脑使用<code>ssh-keygen</code>命令,默认使用rsa算法。输入命令后第一次询问保存位置,回车保存默认位置即可。第二询问钥保护密码,可以输入密码或回车不设置密码,如果设置登录时需要提供私钥和私钥保护密码。 | 在本地电脑使用<code>ssh-keygen</code>命令,默认使用rsa算法。输入命令后第一次询问保存位置,回车保存默认位置即可。第二询问钥保护密码,可以输入密码或回车不设置密码,如果设置登录时需要提供私钥和私钥保护密码。 | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
ssh-keygen | ssh-keygen | ||
# Enter file in which to save the key | |||
# 私钥保存位置,直接回车默认位置和名称,也可以保存其他文件: | |||
C:\Users\用户名/.ssh/computer_1 | |||
# Enter passphrase (empty for no passphrase): | |||
# 询问是否设置钥保护密码,可以输入密码或回车不设置密码,如果设置登录时需要提供私钥和私钥保护密码。 | |||
</syntaxhighlight> | </syntaxhighlight> | ||
=== | {{了解更多 | ||
* | |[https://man.openbsd.org/ssh-keygen.1 OpenBSD 文档:ssh-keygen - OpenSSH 认证密钥工具] | ||
}} | |||
=== 服务器导入公钥 === | |||
部署公钥,将公钥.pub文件内容导入指定文件,使OpenSSH能使用。 | |||
*Linux:服务器用户目录下~/.ssh/authorized_keys 文件,如:<code>/home/你的用户名/.ssh/authorized_keys</code>。 | |||
*Windows:管理员权限的用户,服务器的<code>C:\ProgramData\ssh\administrators_authorized_keys</code>文件。普通权限用户,服务器用户目录下.ssh/authorized_keys 文件,如:<code>C:\Users\你的用户名\.ssh\authorized_keys</code>,如果你的用户名是管理人员权限,默认会读取administrators_authorized_keys公钥文件,未配置会出现 Permission denied (publickey,keyboard-interactive).错误。 | |||
导入示例: | |||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
#服务器在用户目录下创建.ssh | # Linux 服务器在用户目录下创建.ssh | ||
mkdir .ssh | mkdir .ssh | ||
# | # Linux 导入示例,本地电脑操作,将本地生成的公钥id_rsa.pub复制到服务器authorized_keys | ||
scp C:\Users\username/.ssh/id_rsa.pub user2@46.100.162.172:/home/user2/.ssh/authorized_keys | scp C:\Users\username/.ssh/id_rsa.pub user2@46.100.162.172:/home/user2/.ssh/authorized_keys | ||
# Windows 导入示例,本地电脑操作, | |||
scp C:\Users\用户名\.ssh\computer_1.pub user_admin1@192.168.1.100:C:\ProgramData\ssh\administrators_authorized_keys | |||
scp C:\Users\用户名\.ssh\computer_1.pub user1@192.168.1.100:C:\Users\用户名\.ssh\authorized_keys | |||
</syntaxhighlight> | </syntaxhighlight> | ||
# | {{了解更多 | ||
|[https://learn.microsoft.com/zh-cn/windows-server/administration/openssh/openssh_keymanagement#deploying-the-public-key Windows Server 文档:OpenSSH 密钥管理/部署公钥] | |||
}} | |||
=== 客户端登录设置 === | |||
当使用默认名称的密钥id_rsa,可以不配置,直接登录,如: | |||
<syntaxhighlight lang="bash" > | |||
ssh user@46.100.162.172 | |||
# | # 使用-i指定非默认位置和名称的密钥,如 | ||
ssh -i /path/to/key 用户名@主机ip | |||
</syntaxhighlight> | </syntaxhighlight> | ||
如果多个密钥对,登录多台服务器,可以在<code>~/.ssh/config</code>文件中设置服务器对应的认证密钥文件,如: | 如果多个密钥对,登录多台服务器,可以在<code>~/.ssh/config</code>文件中设置服务器对应的认证密钥文件,如: | ||
<syntaxhighlight lang="text"> | <syntaxhighlight lang="text"> | ||
第77行: | 第146行: | ||
IdentityFile /home/yourname/.ssh/tenxun_rsa | IdentityFile /home/yourname/.ssh/tenxun_rsa | ||
</syntaxhighlight> | </syntaxhighlight> | ||
=== 常见登录错误 === | |||
<syntaxhighlight lang="bash" > | |||
Permission denied (publickey,keyboard-interactive) | |||
</syntaxhighlight> | |||
Windows常见错误,解决办法: | |||
*1.如果用户属于管理员组的成员,需要将公钥内容放置在<code>C:\ProgramData\ssh\administrators_authorized_keys</code>文件中。 | |||
*2.配置文件<code>C:\ProgramData\ssh\sshd_config</code>中设置<code>StrictModes no</code>并保存。 | |||
*3.重启sshd服务:<code>restart-Service sshd</code> | |||
{{了解更多 | |||
|[https://learn.microsoft.com/zh-cn/windows-server/administration/openssh/openssh_keymanagement#deploying-the-public-key Windows Server 文档:OpenSSH 密钥管理/部署公钥] | |||
|[https://man.openbsd.org/sshd.8 OpenBSD 文档:sshd - OpenSSH 服务器] | |||
}} | |||
== 服务器配置 == | |||
OpenSSH 服务器默认情况下读取从sshd_config中读取配置数据。也可以通过使用 -f 参数启动 sshd 来指定不同的配置文件。sshd_config默认位置如下: | |||
* Linux:/etc/ssh/sshd_config | |||
* Window:%programdata%\ssh\sshd_config,如C:\ProgramData\ssh\sshd_config | |||
修改服务器 sshd 的配置文件后保存,重启ssh服务即可生效,Linux使用<code>service ssh restart</code>重启,Windows使用<code>restart-Service sshd</code>重启。 | |||
以Linux平台设置为例,编辑配置文件<code>sudo vim /etc/ssh/sshd_config</code>, 修改完成后,使用<code>service ssh restart</code>重启sshd。如果没生效,一些云平台其他位置也有设置覆盖了,如<code>/etc/ssh/sshd_config.d/50-cloud-init.conf</code>也需要修改。常用的配置如下: | |||
{| class="wikitable" | |||
! 配置名称 | |||
! 默认值 | |||
! 描述 | |||
|- | |||
| Port | |||
| 22 | |||
| sshd服务端口,修改非默认端口更安全。<code>Port 2234</code> | |||
|- | |||
| PasswordAuthentication | |||
| yes | |||
| 是否可以使用密码登录。<code>PasswordAuthentication no</code>禁止用密码登录 | |||
|- | |||
| | |||
| | |||
| | |||
|} | |||
{{了解更多 | |||
|[https://learn.microsoft.com/zh-cn/windows-server/administration/openssh/openssh_server_configuration Windows Server 文档:OpenSSH 服务器配置] | |||
}} | |||
第107行: | 第224行: | ||
|} | |} | ||
==资源== | ==资源== | ||
===网站=== | |||
*OpenSSH:https://www.openssh.com/ | |||
===相关教程=== | ===相关教程=== |
2024年3月26日 (二) 15:46的最新版本
Secure Shell(安全外壳协议,简称SSH)是一种加密的网络传输协议,可在不安全的网络中为网络服务提供安全的传输环境。SSH通过在网络中创建安全隧道来实现SSH客户端与服务器之间的连接。SSH最常见的用途是远程登录系统,人们通常利用SSH来传输命令行界面和远程执行命令。
在设计上,SSH是Telnet和非安全shell的替代品。Telnet和Berkeley rlogin、rsh、rexec等协议采用明文传输,使用不可靠的密码,容易遭到监听、嗅探和中间人攻击。SSH旨在保证非安全网络环境(例如互联网)中信息加密完整可靠。不过,SSH也被指出有被嗅探甚至解密的漏洞。
简介
时间轴
SSH服务器安装
Linux
一般服务器操作系统会默认安装SSH服务器,桌面操作系统则不会,如Ubuntu服务器版默认安装,Ubuntu桌面版未安装,需要下载安装,以Ubuntu系统安装OpenSSH Server为例:
sudo apt update # 更新系统软件源
sudo apt install openssh-server
# 查看转态
sudo service sshd status
了解更多 >> Ubuntu 服务器文档:OpenSSH Server
Windows
使用 Windows 设置来安装 OpenSSH:
- 打开“设置”,选择“应用”>“应用和功能”,然后选择“可选功能” 。
- 查找“OpenSSH 服务器”,再单击“安装”
使用 PowerShell 安装 OpenSSH:
# 查找OpenSSH.Client, OpenSSH.Server组件
Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH*'
# 安装 OpenSSH Server
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
# 启动
Start-Service sshd
# 建议设置自动启动
Set-Service -Name sshd -StartupType 'Automatic'
# 查看状态
get-Service sshd
了解更多 >> Windows Server 文档:安装 OpenSSH
快速入门
SSH密码登录
操作系统一般都会自带ssh客户端OpenSSH,在Linux或Windows的命令行输入:
# 查看 SSH client版本
ssh -V
# 以某个用户登录到某IP电脑
ssh username@192.168.1.200
常见问题
- 首次登录时出现“所选的用户密钥未在远程主机上注册”。
可以在服务器上查看密钥的指纹,对比两者是否相同,防止受到中间人攻击。
# 列出服务器ssh密钥文件
ls -al /etc/ssh/*pub
# 查看rsa密钥指纹
ssh-keygen -lf /etc/ssh/ssh_host_rsa_key.pub | awk '{print $2}'
# 查看ECDSA密钥指纹
ssh-keygen -lf /etc/ssh/ssh_host_ecdsa_key.pub | awk '{print $2}'
Windwos下:
ls C:/ProgramData/ssh/
# 查看ECDSA密钥指纹
ssh-keygen -lf C:/ProgramData/ssh/ssh_host_ecdsa_key.pub
# 查找全部
ssh-keyscan localhost | ssh-keygen -lf -
SSH密钥登录
生成公钥和私钥
在本地电脑使用ssh-keygen
命令,默认使用rsa算法。输入命令后第一次询问保存位置,回车保存默认位置即可。第二询问钥保护密码,可以输入密码或回车不设置密码,如果设置登录时需要提供私钥和私钥保护密码。
ssh-keygen
# Enter file in which to save the key
# 私钥保存位置,直接回车默认位置和名称,也可以保存其他文件:
C:\Users\用户名/.ssh/computer_1
# Enter passphrase (empty for no passphrase):
# 询问是否设置钥保护密码,可以输入密码或回车不设置密码,如果设置登录时需要提供私钥和私钥保护密码。
服务器导入公钥
部署公钥,将公钥.pub文件内容导入指定文件,使OpenSSH能使用。
- Linux:服务器用户目录下~/.ssh/authorized_keys 文件,如:
/home/你的用户名/.ssh/authorized_keys
。 - Windows:管理员权限的用户,服务器的
C:\ProgramData\ssh\administrators_authorized_keys
文件。普通权限用户,服务器用户目录下.ssh/authorized_keys 文件,如:C:\Users\你的用户名\.ssh\authorized_keys
,如果你的用户名是管理人员权限,默认会读取administrators_authorized_keys公钥文件,未配置会出现 Permission denied (publickey,keyboard-interactive).错误。
导入示例:
# Linux 服务器在用户目录下创建.ssh
mkdir .ssh
# Linux 导入示例,本地电脑操作,将本地生成的公钥id_rsa.pub复制到服务器authorized_keys
scp C:\Users\username/.ssh/id_rsa.pub user2@46.100.162.172:/home/user2/.ssh/authorized_keys
# Windows 导入示例,本地电脑操作,
scp C:\Users\用户名\.ssh\computer_1.pub user_admin1@192.168.1.100:C:\ProgramData\ssh\administrators_authorized_keys
scp C:\Users\用户名\.ssh\computer_1.pub user1@192.168.1.100:C:\Users\用户名\.ssh\authorized_keys
客户端登录设置
当使用默认名称的密钥id_rsa,可以不配置,直接登录,如:
ssh user@46.100.162.172
# 使用-i指定非默认位置和名称的密钥,如
ssh -i /path/to/key 用户名@主机ip
如果多个密钥对,登录多台服务器,可以在~/.ssh/config
文件中设置服务器对应的认证密钥文件,如:
Host 46.100.162.172
Hostname 46.100.162.172
User user
IdentityFile /home/yourname/.ssh/ali_rsa
Host tenxun
Hostname 11.100.162.172
User ubuntu
IdentityFile /home/yourname/.ssh/tenxun_rsa
常见登录错误
Permission denied (publickey,keyboard-interactive)
Windows常见错误,解决办法:
- 1.如果用户属于管理员组的成员,需要将公钥内容放置在
C:\ProgramData\ssh\administrators_authorized_keys
文件中。 - 2.配置文件
C:\ProgramData\ssh\sshd_config
中设置StrictModes no
并保存。 - 3.重启sshd服务:
restart-Service sshd
服务器配置
OpenSSH 服务器默认情况下读取从sshd_config中读取配置数据。也可以通过使用 -f 参数启动 sshd 来指定不同的配置文件。sshd_config默认位置如下:
- Linux:/etc/ssh/sshd_config
- Window:%programdata%\ssh\sshd_config,如C:\ProgramData\ssh\sshd_config
修改服务器 sshd 的配置文件后保存,重启ssh服务即可生效,Linux使用service ssh restart
重启,Windows使用restart-Service sshd
重启。
以Linux平台设置为例,编辑配置文件sudo vim /etc/ssh/sshd_config
, 修改完成后,使用service ssh restart
重启sshd。如果没生效,一些云平台其他位置也有设置覆盖了,如/etc/ssh/sshd_config.d/50-cloud-init.conf
也需要修改。常用的配置如下:
配置名称 | 默认值 | 描述 |
---|---|---|
Port | 22 | sshd服务端口,修改非默认端口更安全。Port 2234
|
PasswordAuthentication | yes | 是否可以使用密码登录。PasswordAuthentication no 禁止用密码登录
|
了解更多 >> Windows Server 文档:OpenSSH 服务器配置
客户端软件
名称 | 支持系统 | 描述 | 官网 |
---|---|---|---|
GNOME Terminal | Linux | GNOME桌面自带终端,如Ubuntu中的终端软件。可以设置多个配置文件,从而可以快速启动应用或登录不同服务器。 | |
Windows Terminal | Windows | 微软开源的一款终端软件。支持命令提示符、PowerShell和WSL等shell。可以设置多个配置文件。 | 官网:https://docs.microsoft.com/zh-cn/windows/terminal/ 源代码:https://github.com/Microsoft/Terminal |
PuTTY | https://www.chiark.greenend.org.uk/~sgtatham/putty/ | ||
XShell | https://www.netsarang.com/zh/xshell/ |
资源
网站
- OpenSSH:https://www.openssh.com/
相关教程
- 微软 Azure 文档:详细步骤:创建和管理 Azure 中的 Linux VM 用于身份验证的 SSH 密钥
- 阿里云文档:SSH密钥对
- 阿里云文档:通过密钥认证登录Linux实例
- 网道:SSH教程
- 《Pro Git》:4.3 服务器上的 Git - 生成 SSH 公钥