SSH

加密的网络传输协议

Posted by Hao on January 17, 2022

背景介绍

SSH相关:Secure Shell(SSH) 是由 IETF(The Internet Engineering Task Force) 制定的建立在应用层基础上的安全网络协议。它是专为远程登录会话(甚至可以用Windows远程登录Linux服务器进行文件互传)和其他网络服务提供安全性的协议,可有效弥补网络中的漏洞。

目前使用到的情形有:

如何设置本地电脑为服务器

通过ifconfig可以访问当前ip,下载对应的服务器协议进行安装。SSH分为客户端openssh-client和服务器 openssh-server。

如何连接远程服务器

SSH服务的默认端口是22,也就是说,如果你不设置端口的话登录请求会自动送到远程主机的22端口。我们可以使用 -p 选项来修改端口号

  • ssh -l username ip/server_name
  • ssh username@ip_address # 口令登录
  • ssh -X username@ip_address # 调用图形界面
  • ssh ip_addres # 如果客户机的用户名和服务器的用户名相同,登录时可以省略用户名

SSH的免密登录

SSH的使用条件为,服务器拥有本地公钥值,而本地拥有公钥及私钥可以对访问进行验证。免密登录的步骤有:

  1. 在本地终端生成密钥对,可以指定加密方式等,例如ssh-keygen。此时会在本地的”~/.ssh”目录下生成名为id_rsa和id_rsa.pub的私钥文件和公钥文件。
  2. 将公钥字段复制到远程服务器,例如git的Add SSH中以及远程服务器的”~/.ssh/authorized_keys”文件内。可以通过手动赋值或者通过ssh-copy-id user@host的形式(linux命令),windows尚未找到,仍需手动添加

SSH的免ip登录以及为当前用户配置不同的公钥(也可参考Git SSH配置文章)

直接通过ssh host_nickname即可实现登录

配置关键文件~/.ssh/config,添加以下内容:

1
2
3
4
5
6
Host server-alias           # server-alias为SSH链接的服务器别名
HostName server-ip  # 服务器地址
Port 22
User username           # 服务器端用户名
PreferredAuthentications publickey 
IdentityFile ~/.ssh/id_rsa   # 私钥地址,默认为 ~/.ssh/id_rsa

最基础版本的设置如下,即可实现免ip和用户名登陆

1
2
3
Host Desktop
  HostName __your_ip__
  User __your_ip_username__

文件传输

经过上述配置,有效的简化了登录操作,会为我们节省不少时间。更重要的是,所有底层使用SSH的程序,都因此而简化了操作步骤。比如:

用于传输文件的scp和rsync命令。scp 是 secure copy 的缩写, scp 是 linux 系统下基于 ssh 登陆进行安全的远程文件拷贝命令。scp 命令格式为:

1
2
3
4
# 递归传输文件
scp -r local_file remote_username@remote_ip:remote_folder 
# 远程服务器文件传输到本地
scp -r remote_username@remote_ip:remote_folder local_file

如果服务器端上配置了git远程仓库,只需输入:

1
git clone server-alias:/git-repo

SSH相关文章