SSH

检查 SSH 客户端

如果使用专门的 SSH 客户端可跳过该步。

检查一下本机(要远程连接别人的机器)有没有安装 SSH 客户端,终端中输入 ssh 查看输出,如果提示未找到命令则需要手动安装 OpenSSH。

以 Ubuntu 等 Debian 系发行版为例:

sudo apt install openssh-client

开启 SSHD 服务

有些系统的 sshd 服务默认开启,如云服务器,可跳过该步。

在将要被远程的系统的终端中输入 ssh 127.0.0.1,提示请输入 yes/no/[fingerprint] 的话可以 Ctrl + c 停止;提示不能连接的,请先安装并开启 ssh 服务器。sshd 就是 ssh 的服务器端。

还是以 Ubuntu 等 Debian 系发行版为例:

sudo apt install openssh-server

然后开启 sshd 服务,并设置自启动。

sudo systemctl start sshd  #启动服务
sudo systemctl enable sshd #设置自启动

Debian 系给 sshd 的 service 起名叫 ssh,不知怎么想得,不过 sshd 也还能用。

SSH登录命令

直接输入

ssh 登陆命令的一般格式为 ssh user@HostName,如:

ssh root@0.0.0.0

如果需要指定端口就增加-p <port>,不指定端口使用默认的22端口,如:

ssh -p 8022 root@0.0.0.0

配置文件

每次输入太长也不好记,可以自己设置一个别名,别名配置保存在 ~/.ssh/config 中。

~是指当前用户的主目录。Unix-like 上即 ~$HOME 所指;Windows 上为 %USERPROFILE% 所指,在地址栏输入 %USERPROFILE% 即可进入。

下面是一个例子,注释是 Github Copilot 提示的,我看是对的,说明有人写过,哈哈:

Host demo    # 主机别名,可以自定义
  HostName 0.0.0.0  # 服务器地址
  Port 8022  # 端口号,可以不写,默认22
  User root  # 登录用户名,可以不写,默认当前用户

写好保存之后就可以直接使用 ssh demo 登录了,和使用 ssh -p 8022 root@0.0.0.0 效果是一样的。

SSH 免密登录

SSH认证方式有两种:

  • 用户名密码认证
  • 公钥私钥认证

上面什么都不做就登陆会使用第一种用户名密码认证,如果不配置密钥的话每次连接都要输入密码进行验证。下面说第二种方式。

生成本地公私钥

本地终端中执行

ssh-keygen

生成的密钥文件就放在了 ~/.ssh 目录中,图为 Windows 的样例。

image

添加到“已授权”文件中

将本地用户 ~/.ssh/id_rsa.pub 中的内容添加到被远程用户的 ~/.ssh/authorized_keys 文件中,这个本地用户以后就可以免密登录了。

可以使用 ssh-copy-id,用法和 ssh 一样,只需把 ssh 换成 ssh-copy-id 即可。(Windows 上的 OpenSSH 好像没有?)

如:

ssh-copy-id user@HostName

也可以自己复制粘贴(没有已授权文件的话自己创建一下)。 image