SSH(Secure Shell)是一种安全的远程登录协议,它使用客户端-服务器架构促进2个系统之间的安全通信,并允许用户远程登录服务器。在某些高可用环境下,服务器之间可能还需要配置免密互信,即基于密钥验证登录。
目录
- 一、SSH简介
- 1.1 使用ssh登录
- 1.2 使用scp传输文件
- 1.3 使用sftp传输文件
- 二、使用基于密钥的身份验证(免密登录)
- 2.1 生成密钥对
- 2.2 将公钥复制到远程服务器
一、SSH简介
SSH协议会通过加密技术进行身份验证,并在传输层构建多个安全通道,提供安全的数据传输服务,常用基于SSH协议的工具有远程登录工具ssh,远程拷贝工具scp,安全文件传输工具sftp。
1.1 使用ssh登录
使用ssh可以使用加密连接登录到远程服务器,使用ssh user@host格式命令登录,输入密码后即登录成功(返回远程服务器的shell提示符):
ssh vincent@172.16.1.38
ssh还可以直接在远程服务器上运行命令而不登录,在ssh user@host后直接跟上需要执行的命令:
ssh vincent@172.16.1.38 ls -l
1.2 使用scp传输文件
scp使用加密的连接在计算机之间传输文件,可以将本地文件拷贝到远程服务器,或将远程文件拷贝到本地,命令格式为:
scp localfile user@host:remotefile
scp user@host:remotefile localfile
示例:将本地/root/1.txt拷贝到远程的/home/vincent目录下,并改名为2.txt:
scp /root/1.txt vincent@172.16.1.38:/home/vincent/2.txt
示例:将远程/home/vincent/2.txt文件拷贝到本地当前目录(.代表当前目录):
scp vincent@172.16.1.38:/home/vincent/2.txt .
1.3 使用sftp传输文件
sftp和普通的ftp协议类似,但是它使用了加密连接,更加安全,要连接到服务器使用sftp user@host格式的命名(输入密码后登录):
sftp vincent@172.16.1.38
sftp常用命令:
命令 | 功能 |
---|---|
ls [directory] | 列出远程目录的内容。如果没有提供目录,则使用当前目录 |
cd directory | 将远程工作目录更改为directory |
mkdir directory | 创建远程目录 |
rmdir directory | 删除远程目录 |
put localfile [remotefile] | 将 localfile 传输到远程计算机 |
get remotefile [localfile] | 从远程计算机传输 remotefile |
二、使用基于密钥的身份验证(免密登录)
通过基于密钥的身份验证,可以让客户端连接服务器时不再输入密码。其原理是通过非对称加密算法进行身份认证,客户端生成密钥对后,将公钥传给远程服务器(私钥自己保留)。
2.1 生成密钥对
第一步通过ssh-keygen命令生成基于SSH协议版本2的RSA密钥对,遇到输入提示,保持默认一直回车即可:
ssh-keygen -t rsa
命令会在用户的$HOME/.ssh/下生成2个文件,其中id_rsa为私钥,id_rsa.pub为公钥:
2.2 将公钥复制到远程服务器
接下来使用ssh-copy-id user@host命令将公钥传输给服务器,如果是首次连接服务器会有类似如下提示,这是一个服务器指纹验证,用于验证服务器的真实性:
ssh-copy-id vincent@172.16.1.38
输入yes后,会再次提示输入要连接的用户密码:
输入密码后,会提示公钥添加成功,公钥的内容会保存在服务器的~/.ssh/autorized_keys文件中,如果该文件已存在,则会附加在文件尾部。当客户端连接到服务器时,服务器通过检查存储在此文件中的签名公钥来验证客户端的身份验证(不再提示输入密码)。
完成上述配置后,ssh,scp,sftp都不再需要输入密码就可以使用了:
ssh vincent@172.16.1.38
scp 1.txt vincent@172.16.1.38:/home/vincent
sftp vincent@172.16.1.38