原文链接:https://blog.csdn.net/weixin_50964512/article/details/123588745
一、SSH是什么?
SSH(Secure Shell 的缩写)是一种网络协议,用于加密两台计算机之间的通信,并且支持各种身份验证机制。实务中,它主要用于保证远程登录和远程通信的安全,任何网络服务都可以用这个协议来加密。需要注意的是,ssh是一种协议,而通常我们说的是实现了这种协议的软件,例如知名的openssh
二、安装openssh
1. ubuntu安装openssh
一般linux系统都自带ssh,如果没有就可以安装一下
sudo apt update #更新ubuntu系统数据sudo apt upgrade #更新ubuntu系统软件sudo apt install openssh-server #下载安装ssh服务的服务器sudo apt install openssh-client #下载安装ssh服务的客户端
2. Windows安装OpenSSH
Windows 10及更高版本已经内置了OpenSSH,我们只需要启用它即可。具体步骤如下:
打开“设置”应用,点击“应用”选项。
在“应用和功能”页面中,点击“可选功能”。
在“添加功能”页面中,搜索“OpenSSH客户端”,“OpenSSH服务器”并勾选它。
点击“安装”按钮,等待安装完成。
三、SSH服务校验方法
安装完成后,SSH服务默认自动启动,你可以通过以下命令校验服务运行状态:
sudo systemctl status ssh
命令执行后,输出内容类似如下:
output ● ssh.service - OpenBSD Secure Shell server Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled) Active: active (running) since Mon 2020-06-09 12:34:00 CEST; 9h ago ...
按q退出返回命令行提示符。
四、SSH客户端使用方法
ubuntu 系统的位置是/usr/bin/ssh,Windows系统的位置是C:\Program Files\OpenSSH-Win64\ssh.exe。
1.连接命令
ssh hostname
上面命令中,hostname是主机名,它可以是域名,也可能是 IP 地址或局域网内部的主机名。不指定用户名的情况下,将使用客户端的当前用户名,作为远程服务器的登录用户名。
ssh user@hostname
上面的命令中,用户名和主机名写在一起了,之间使用@分隔。
ssh -p 8821 foo.com
上面命令连接服务器foo.com的8821端口
ssh -p 8821 user@hostname
上面命令用user身份连接服务器hostname的8821端口。
2.连接过程
ssh 连接远程服务器后,首先有一个验证过程,验证远程服务器是否为陌生地址。如果是第一次连接某一台服务器,命令行会显示一段文字,表示不认识这台机器,提醒用户确认是否需要连接。
The authenticity of host 'foo.com (192.168.121.111)' can't be established.
ECDSA key fingerprint is SHA256:Vybt22mVXuNuB5unE++yowF7lgA/9/2bLSiO3qmYWBY.
Are you sure you want to continue connecting (yes/no)?
上面这段文字告诉用户,foo.com这台服务器的指纹是陌生的,让用户选择是否要继续连接(输入 yes 或 no)。
所谓“服务器指纹”,指的是 SSH 服务器公钥的哈希值。每台 SSH 服务器都有唯一一对密钥,用于跟客户端通信,其中公钥的哈希值就可以用来识别服务器。
五、服务器端设置
SSH 的架构是服务器/客户端模式,两端运行的软件是不一样的。OpenSSH 的客户端软件是 ssh,服务器软件是 sshd。
1.运行sshd
sshd
上面的命令运行后,如果提示“sshd re-exec requires execution with an absolute path”,就需要使用绝对路径来启动。这是为了防止有人出于各种目的,放置同名软件在$PATH变量指向的目录中,代替真正的 sshd。
sudo service ssh startsudo service ssh restartsudo service ssh stop
下面的命令让 sshd 在计算机下次启动时自动运行。
sudo systemctl enable sshd.service
2.配置文件
sshd 的配置文件在/etc/ssh目录,主配置文件是sshd_config,此外还有一些安装时生成的密钥。
/etc/ssh/sshd_config:配置文件
/etc/ssh/ssh_host_ecdsa_key:ECDSA 私钥。
/etc/ssh/ssh_host_ecdsa_key.pub:ECDSA 公钥。
/etc/ssh/ssh_host_key:用于 SSH 1 协议版本的 RSA 私钥。
/etc/ssh/ssh_host_key.pub:用于 SSH 1 协议版本的 RSA 公钥。
/etc/ssh/ssh_host_rsa_key:用于 SSH 2 协议版本的 RSA 私钥。
/etc/ssh/ssh_host_rsa_key.pub:用于 SSH 2 协议版本的 RSA 公钥。
/etc/pam.d/sshd:PAM 配置文件。
注意,如果重装 sshd,上面这些密钥都会重新生成,导致客户端重新 ssh 连接服务器时,会跳出警告,拒绝连接。为了避免这种情况,可以在重装 sshd 时,先备份/etc/ssh目录,重装后再恢复这个目录。
配置文件sshd_config的格式是,每个命令占据一行。每行都是配置项和对应的值,配置项的大小写不敏感,与值之间使用空格分隔。
Port 2034
上面的配置命令指定,配置项Port的值是2034。Port写成port也可。
配置文件还有另一种格式,就是配置项与值之间有一个等号,等号前后的空格可选。
Port = 2034
配置文件里面,#开头的行表示注释。
sshd 启动时会自动读取默认的配置文件。如果希望使用其他的配置文件,可以用 sshd 命令的-f参数指定。
修改配置文件以后,可以用 sshd 命令的-t(test)检查有没有语法错误。
sshd -t
配置文件修改以后,并不会自动生效,必须重新启动 sshd。
sudo service ssh restart