ssh连接linux虚拟机
2021.04.26 Mon
SSH 的软件架构是服务器-客户端模式(Server - Client)。在这个架构中,SSH 软件分成两个部分:向服务器发出请求的部分,称为客户端(client),OpenSSH 的实现为 ssh;接收客户端发出的请求的部分,称为服务器(server),OpenSSH 的实现为 sshd。
ssh 密码登录
1 |
|
user 是服务端的用户名,hostname 是 ip 地址或者域名,连接之后会提示输入密码登录
密钥登录
SSH 密钥登录分为以下的步骤。
- 预备步骤,客户端通过 ssh-keygen 生成自己的公钥和私钥。
- 第一步,手动将客户端的公钥放入远程服务器的指定位置。
- 第二步,客户端向服务器发起 SSH 登录的请求。
- 第三步,服务器收到用户 SSH 登录的请求,发送一些随机数据给用户,要求用户证明自己的身份。
- 第四步,客户端收到服务器发来的数据,使用私钥对数据进行签名,然后再发还给服务器。
- 第五步,服务器收到客户端发来的加密签名后,使用对应的公钥解密,然后跟原始数据比较。如果一致,就允许用户登录。
总之,私钥在客户端手里,公钥给服务器
1 |
|
密钥默认在当前管理员路径下的.ssh/文件夹下面,包括 id_rsa 和 id_rsa.pub
生成密钥后,修改权限为仅文件拥有者可读写
1 |
|
有了密钥,现在需要将公钥发送给服务器端
手动上传公钥
1
2
3$ cat ~/.ssh/id_rsa.pub | ssh user@host "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
or
$ scp ~/.ssh/id_rsa.pub user@host:~/.ssh/authorized_keys同样需要设置 authorized_keys 的权限
1
$ chmod 644 ~/.ssh/authorized_keys
ssh-copy-id 自动上传公钥
1
$ ssh-copy-id -i ~/.ssh/id_ras user@host
-i 是指定公钥文件,公钥文件可以不指定路径和.pub 后缀名,命令会自动在~/.ssh 目录下寻找
关闭密码登录
启用密钥登录后,可以关闭服务器的密码登录,打开服务器 sshd 的配置文件/etc/ssh/sshd_config,将 PasswordAuthentication 设置为 no,重启 sshd1
2# 重启
$ sudo systemctl restart sshd.service
scp 命令
scp 是 secure copy 的缩写,相当于 cp 命令 + SSH。它的底层是 SSH 协议,默认端口是 22,相当于先使用 ssh 命令登录远程主机,然后再执行拷贝操作。
scp 主要用于以下三种复制操作。
- 本地复制到远程。
- 远程复制到本地。
- 两个远程系统之间的复制。
1 |
|
source 和 destination 都可以包含用户名和主机名,即
1 |
|
参考链接:
阮一峰-SSH 教程