基本原理(口语化):你要认识对方,对方也要认识你。这样就可以了!
下面所有命令都在 powershell 中运行:
-
认识对方
# 输入以下命令 $ ssh root@xx.xx.xx.xx The authenticity of host 'xx.xx.xx.xx' can't be established. ECDSA key fingerprint is SHA256:qq/xxxxxxxxxxx Are you sure you want to continue connecting (yes/no/[fingerprint])? # 初次连接云端(初次见面)时,并不认识对方,输入 yes 回车后,SSH 客户端就会自动记住对方。方法是将对方的公钥存储在 ~/.ssh/known_hosts 文件中
Tip:
~
表示当前用户文件夹,可以通过 powershell 运行echo $env:USERPROFILE
或echo $HOME
来查看 -
让对方认识你
$ ssh-keygen -t ECDSA # 生成本机的公私钥。不带 -t ECDSA 参数时默认为 RSA 算法,这里使用 ECDSA 算法,签名和加密速度相对快点。 # 私钥通常存储在 ~/.ssh/id_ecdsa # 公钥通常存储在 ~/.ssh/id_ecdsa.pub # 如果你之前生成过公私钥,可忽略本步骤 $ Get-Content $env:USERPROFILE\.ssh\id_ecdsa.pub | ssh root@xx.xx.xx.xx "cat >> .ssh/authorized_keys" # 运行该命令后需要先输入 root 账户的密码 # 该命令用于将本机的公钥(id_ecdsa.pub)添加到主机的 .ssh/authorized_keys 文件中。
怎么样,简单吧!
以后登录,直接通过以下命令:
$ ssh root@xx.xx.xx.xx -i $HOME\.ssh\id_ecdsa
# -i 参数指定本机刚刚生成的私钥,以便主机验证我们的身份
2024-3-18 添加内容
或者通过 vscode 直接连接云端主机
打开 Command Palette >remote-ssh: open ssh configuration file
添加以下配置:
Host 名称
HostName xx.xx.xx.xx
User root
IdentityFile ~/.ssh/id_ecdsa
然后再次打开 Command Palette >remote-sshconnecttohost
选择刚刚创建出来的“Host 名称”就可以连接了。
TIP: 为 alan 用户提供 ssh 登录
一直使用 root 用户进行操作是一个非常不好的习惯,通常我们会创建一个普通用户,然后只在有需要的时候使用 sudo 命令进行管理员操作。
# 首先我们是 root 用户
$ adduser alan
# 添加 alan 用户
$ passwd alan
# 你可以通过这个命令为 alan 用户设置密码。
# 但这里我们并不需要,因为我们要使用密钥进行登录
#
# 打开一个 split 终端,使用 alan 用户进行操作
#
$ su alan
# 从 root 切换到 alan 用户
alan$ mkdir -p ~/.ssh && touch $_/authorized_keys
# 创建一个 /home/alan/.ssh/authorized_keys 文件夹
alan$ chmod 700 ~/.ssh
# 修改 .ssh 文件夹的权限,仅限 alan 用户或 root 用户操作
alan$ chmod 600 ~/.ssh/authorized_keys
# 同上
#
# 在原先的 split 终端,使用 root 用户进行操作
#
$ cat ~/.ssh/authorized_keys > ~alan/.ssh/authorized_keys
# 将前面我们本机的公钥直接拷贝到 alan 用户的 authorized_keys 文件夹中
# 注意,这里的步骤是和前面连着的,因为前面我们已经将本地的公钥添加
# 到 /root/.ssh/authorized_keys 文件中了,而且文件中只有我们这一个公钥。
# 当然,你也可以在本机重新生成公私钥,就像前面一样,然后然后按照同样的
# 方法传递到 alan 用户的 ~alan/.ssh/authorized_keys 文件夹中。
现在,使用 ssh 登录时,更改用户名为 alan,并且指定刚刚生成的私钥即可成功登录!。
上面步骤中,切换到 alan 进行操作的目的是为了让 ~alan/.ssh 文件夹和 ~alan/authorized_keys 文件的所有者是 alan,如果你是用 root 用户操作,那么你需要通过 chown alan:alan ~alan/.ssh && chown alan:alan ~alan/.ssh/authorized_keys
命令修改所有者为 alan