利用 SSH 连接远程主机即服务器
2020年5月7日大约 3 分钟约 904 字...
首先设置一下你想要的配置
注意
若为 WSL,SSH_Port
一定要修改且不能为 22
端口!
相关信息
22 端口为 OpenSSH 默认端口,Windows 上的 22 端口已被其上 OpenSSH 占用,WSL 就需选用其他端口如 2222
。
Bash/PowerShell
HostName=remote-hostname
ServerAddress=server.address
SSH_Port=22
UserName=username
本地主机及远程主机安装 OpenSSH
提示
大多数 VPS 的系统都已经安装好 OpenSSH。
注意
WSL 系统默认并不会安装 OpenSSH,因此需要手动安装。
Debian/Ubuntu
sudo apt install openssh-server
RHEL/CentOS
sudo yum install openssh-server
Arch
sudo pacman -S openssh
Windows PowerShell
# 安装 OpenSSH 客户端
Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0
# 安装 OpenSSH 服务器
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
修改远程主机 SSH 端口
提示
若远程主机是服务器可以等之后 修改远程主机 SSH 配置时再修改。
我为什么要把这步放在这里(⊙o⊙)?那当然是因为 WSL 一定要现在就修改 SSH 端口啦( ̄ y▽, ̄)╭。
找到 /etc/ssh/sshd_config
中以下项并将其配置为以下值:
Port ${SSH_Port}
Bash
sed -i '/^#Port/s/#//' /etc/ssh/sshd_config
sed -i "/^Port[[:space:]]*22\$/s/22/${SSH_Port}/" /etc/ssh/sshd_config
PowerShell
Start-Process Notepad C:\Programdata\ssh\sshd_config
注
你要问为什么 sed
命令一个是单引号 '
,一个是双引号 "
(・∀・(・∀・(・∀・*)?那当然是因为:
在 Bash 命令行中双引号 "
中的 Shell 变量 ${}
会解析出来,而单引号 '
却不会。下面的 echo
命令同理。
有用的知识又增加了 ╰(*°▽°*)╯!
启用远程主机 OpenSSH 服务
提示
大多数 VPS 主机默认启用。
注意
WSL 要手动启用。
Bash
sudo systemctl enable sshd
sudo systemctl start sshd
PowerShell
Set-Service -Name sshd -StartupType 'Automatic'
Start-Service sshd
本地主机生成密钥对
Bash/PowerShell
ssh-keygen -t rsa
本地主机添加 SSH 配置
Bash
touch ~/.ssh/config
PowerShell
New-Item ~/.ssh/config
填入以下配置:
Host ${HostName}
HostName ${ServerAddress}
Port ${SSH_Port}
User ${UserName}
IdentityFile ~/.ssh/id_rsa
Bash/PowerShell
echo "Host ${HostName}
HostName ${ServerAddress}
Port ${SSH_Port}
User ${UserName}
IdentityFile ~/.ssh/id_rsa" >> ~/.ssh/config
本地主机上传公钥至远程主机
Bash/PowerShell
scp ~/.ssh/id_rsa.pub ${HostName}:~
此时应该会要求输入远程主机密码。
本地主机连接远程主机
Bash/PowerShell
ssh ${HostName}
此时同样要输入远程主机密码。
远程主机添加公钥
Bash/PowerShell
cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
提示
公钥添加完毕后可从远程主机删除。
Bash
rm -rf ~/id_rsa.pub
PowerShell
Remove-Item ~/id_rsa.pub
注意
若提示无此文件,请手动创建并赋予正确权限。
Bash
mkdir ~/.ssh && \
chmod 700 ~/.ssh && \
touch ~/.ssh/authorized_keys && \
chmod 600 ~/.ssh/authorized_keys
测试是否能够正确连接
提示
一般在本地进行。
Bash/PowerShell
ssh ${HostName}
若连接时无需输入密码则成功。
配置远程主机 SSH
打开 /etc/ssh/sshd_config
找到并更改如下项的配置:
PermitRootLogin no
PasswordAuthentication no
Bash
sed -i '/^#PermitRootLogin/s/#//' /etc/ssh/sshd_config
sed -i '/^PermitRootLogin[[:space:]]*yes$/s/yes/no/' /etc/ssh/sshd_config
sed -i '/^#PasswordAuthentication/s/#//' /etc/ssh/sshd_config
sed -i '/^PasswordAuthentication[[:space:]]*yes$/s/yes/no/' /etc/ssh/sshd_config
PowerShell
Start-Process Notepad C:\Programdata\ssh\sshd_config
提示
若需要修改 SSH 端口却没有修改不要忘记现在修改远程主机 SSH 端口!
重启远程主机 SSH
Bash
sudo systemctl restart sshd
PowerShell
Restart-Service sshd