ssh(Secure Shell)

自闭症网瘾萝莉.ら 提交于 2020-03-30 10:11:06

一、ssh 基础使用

  1. ssh 客户端使用 Secure Shell(ssh)协议连接到运行了 ssh 服务端的远程服务器上。

  2. ssh 是专为远程登录会话和其他网络服务提供安全性的协议。

    • 有效防止远程管理过程中的信息泄露;
    • 传输数据加密,可以防止 DNS 和 IP 欺骗;
    • 传输数据压缩,加快传输速度。

  3. OpenSSH 是 SSH 协议的免费开源实现,提供了服务端程序(openssh-server)和客户端程序(openssh-client)。

    • Mac 和 Linux 中默认安装了 ssh 客户端,可以直接在中断中使用 ssh 命令。
    • Windows 需要手动安装 ssh 客户端,常用的有 PuTTY 和 XShell。

  4. OpenSSH 服务端常用命令

 1 # 安装服务端(Ubuntu)
 2 sudo apt install openssh-server
 3 
 4 # 安装客户端(Ubuntu)
 5 sudo apt install openssh-client
 6 
 7 # 查看 ssh 服务是否开启
 8 netstat -tlp | grep ssh
 9 
10 # 启动/停止/重启 ssh 服务
11 sudo /etcinit.d/ssh start
12 
13 # 启动/停止/重启 ssh 服务
14 sudo /etcinit.d/ssh stop
15 
16 # 启动/停止/重启 ssh 服务
17 sudo /etcinit.d/ssh restart

  5. ssh 服务端配置文件默认为 /etc/ssh/sshd_config,可以按需修改默认 22 端口等配置。

1 # 命令格式
2 $ ssh [-options] [user@hostname]
3 
4 # options
5 # -p:指定 ssh 端口号,默认端口为 22
6 # -i:使用指定私钥文件连接服务器(免密登录)
    • user:远程服务器登录的用户名,默认为当前用户
    • hostname:远程服务器地址,可以是 IP、域名、别名
    • exit 或 logout 都可以退出当前登录
1 # 以colin用户登录192.168.1.196的到ssh服务器
2 $ ssh colin@192.168.1.196
3 
4 # 以colin用户登录到192.168.1.198的ssh服务器,使用2222端口
5 $ ssh -p 2222 colin@192.168.1.198

 

二、ssh 高级配置

  1. ssh 的配置都保存在 ~/.ssh 中

    • known_hosts:作为客户端。记录曾连接服务器授权。ssh第一次连接一台服务器会有一个授权提示,确认授权后会记录在此文件中,下次连接记录中的服务器时则不再需要进行授权确认提示。
    • authorized_keys:作为服务端。客户端的免密连接公钥文件
    • config:作为客户端,记录连接服务器配置的别名

  2. 服务器别名

  远程管理命令(如 ssh、scp 等)连接一台服务器时,一般都需要提供服务器地址、端口、用户名,每次输入会很麻烦。我们可以把常用的服务器连接参数打包,记录到配置文件中,并记录一个别名。这样我们就可以通过别名来访问服务器了。

  配置方法如下:

    • 创建或打开 ~/.ssh/config,在文件中追加服务器配置信息。
    • 一台服务器的配置信息如下:
1 # 以下配置中,只有 HostName 是必选项,其余的可以省略
2 Host ColinMac
3     HostName 192.168.199.116
4     User colin
5     Port 22

  配置完成后,远程管理命令中就可以直接使用别名访问了:

1 $ ssh 116-Server
2 $ scp 123.txt 116-Server:Desktop

  3. 免密登录

1 # 命令格式
2 ssh-keygen [-options]

  options:

    • -t:指定加密类型,默认为非对称加密(rsa),所有可选项:dsa,ecdsa,ed25519,rsa
    • -f:秘钥文件名
    • -C:注释,将附加在秘钥文件尾部

  远程管理命令(如 ssh、scp 等)每次都要提供用户密码保证安全。除此之外,我们可以配置使用指定加密算法验证秘钥的方式,来避免每次输入密码。

  配置免密登录后,ssh 连接和 scp 等远程管理命令都不需要再输密码。

  生成秘钥时,如果指定了文件名,连接服务器时需要通过 -i 指定要验证的秘钥文件,譬如: ssh -i file user@host。默认文件名则可以省略。

  配置步骤:

1 # 客户端生成秘钥
2 ssh-keygen
3 
4 # 上传公钥到服务器
5 ssh-copy-id user@hostname    # 文件会自动上传为服务器特定文件 ~/.ssh/authorized_keys

  4. 免秘钥文件登录

  i. 生成秘钥对

1 ssh-keygen -t rsa -f ~/.ssh/[KEY_FILENAME] -C [USERNAME]
2 chmod 400 ~/.ssh/[KEY_FILENAME]

  ii. 上传公钥

  iii. 简化登录

  我们可以将秘钥文件添加到 ssh 客户端 ~/.ssh/config 中,简化连接命令

1 Host *
2  AddKeysToAgent yes
3  UseKeychain yes  # only for mac
4 
5 Host tu
6    HostName IP_ADDRESS
7    Port 22
8    User USERNAME
9    IdentityFile ~/.ssh/gcp
1 # 后台运行ssh-agent
2 $ eval "$(ssh-agent -s)"
3 # 添加密钥到ssh-agent
4 $ ssh-add -K ~/.ssh/gcp
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!