什么是 SSH

Secure Shell(安全外壳协议,简称SSH)是一种加密的网络传输协议,可在不安全的网络中为网络服务提供安全的传输环境。SSH通过在网络中创建安全隧道来实现SSH客户端与服务器之间的连接
来自维基百科 Secure Shell (SSH)

SSH 服务端

SSH 服务端就是一个守护进程,后台运行,响应客户端的请求

  • centos 安装:
yum install -y openssh-server

一般都会默认安装的,图形化的 linux 系统一般没有

  • 服务相关命令
systemctl start sshd      #启动
systemctl stop sshd      #关闭
systemctl restart sshd   #重启
systemctl enable sshd   #开机自启
systemctl disable sshd  #关闭开机自启
systemctl status sshd    #查看状态

SSH 客户端

  • centos 安装
yum install -y openssh-client

安装了服务端,默认就会安装客户端

  • windows 下的 SSH 客户端

securecrt xshell ... 应用程序,都是可视化操作,比较简单

连接服务端

密码登录

ssh user@host -p port
# 或者
ssh -i ~/.ssh/id_rsa -p port -l user host

user :用户名,例如:root
host : 主机地址,例如:192.168.0.100
-p : 端口,不指定默认 22
-i : 证书文件,默认 ~/.ssh/id_rsa ,如果用免密登录才需要
-l : 用户名

免密登录

假设 A 要访问 B ,就得在 A 服务器上生成一对秘钥,将生成的公钥配置到 B 服务器

  • 生成秘钥(私钥+公钥)
    window 可以使用软件生成,这里说说 linux 生成
# 在当前目录生成,这里在 ~/.ssh 目录
ssh-keygen –t rsa -f belier -P ""

-t : 使用什么加密方式,默认 rsa,一般有 rsa dsa esdsa ...
-f : 设置文件名称,默认文件名:id_rsa,如果不指定会提示输入,不输入直接回车还是会使用默认文件名
-P : 秘钥的密码,"" 就是不设置密码

  • 配置公钥
    将生 ~/.ssh/{name}.pub 拷贝到 B 服务器的 ~/.ssh/authorized_keys 文件中
    输出公钥内容
cat ~/.ssh/{name}.pub

如果没有 ~/.ssh/authorized_keys 文件,使用如下命令创建

touch ~/.ssh/authorized_keys

配置多个公钥,可以换行进行分割

~ 是当前用户的根目录,root 用户的根目录就是 /root ,如果想使用 root 用户免密登录,B 服务器就得切换到 root 用户

  • 使用免密登录
# 我的秘钥不是默认名称,需要指定私钥文件
ssh root@192.168.10.100 -i ~/.ssh/belier

第一次免密登录有一个确认提示:

The authenticity of host '192.168.10.100 (192.168.10.100)' can't be established.
ECDSA key fingerprint is SHA256:F1wrt2fjlZuDDTuUeNnuB10m4FifT6zQdA6moSIbQLQ.
ECDSA key fingerprint is MD5:29:ed:82:6e:3b:7c:63:86:48:91:75:df:2e:91:90:c2.
Are you sure you want to continue connecting (yes/no)?

主要是让你确认远程服务器信息,避免中间人劫持,发现问题就 no ,不连接

如果出现问题:

Permission denied (publickey,gssapi-keyex,gssapi-with-mic).

方案:

# 编辑 /etc/ssh/sshd_config 文件
RSAAuthentication yes
PubkeyAuthentication yes
# 设置 权限
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys 

快捷登录

上面的登录方式要输一大串命令,我们可以通过配置文件的方式,记录登录信息,通过设置别名简化命令

用户配置文件,放置在 ~/.ssh/config,只有当前用户能使用
系统配置文件,放置在 /etc/ssh/ssh_config,都能使用(区别于 /etc/ssh/sshd_config)

这里我使用 ~/.ssh/config

# 设置的别名
Host server-b
  # 主机地址
  HostName 192.168.10.100
  # 用户名
  User root
  # 私钥地址
  IdentityFile ~/.ssh/belier
  # 端口 
  Port 22 

使用:

# 现在就简洁多了
ssh server-b

端口更改

为了更好的保证服务器的安全性,修改默认端口还是有必要的,其它的服务最好也修改掉默认端口

编辑 /etc/ssh/sshd_config 文件

Port 22
Port 2233

最好先把默认端口保留,避免新的端口没有配置好,导致后面连不上,等尝试能正常连接了,再将默认的端口删除

重启服务:

systemctl restart sshd

端口放行:
这里以 firewall 防火墙为例

# 开放端口
firewall-cmd --permanent --zone=public --add-port=2233/tcp 
# 重启加载防火墙配置
firewall-cmd --reload

写的不好,仅供参考