SSH 协议
- SSH协议使用加密技术确保client和server之间的连接安全。
- 所有的认证,命令,输出,以及文件传输都会被加密,加密是为了抵御来自互联网的攻击。
- SSH协议原理
- SSH文件传输协议
- SSH clients/servers
- Linux ssh command
原理部分较为深奥,我将基于对Linux ssh command的翻译对SSH做一些探索,会加入一些自己的实验和总结,主要目的在于:应用。
Linux SSH COMMAND
这一页主要是Unix/Linux或者Mac终端的OpenSSH ssh命令。几乎所有的Unix和Linux系统包括ssh命令。这个命令可以用来开启SSH 客户端程序,从而建立SSH 服务器与远程机器之间的安全连接。ssh命令有以下用途:
- 登录远程机器
- 在两台机器间传输文件
- 在远程机器上执行命令
Linux的SSH 命令
ssh命令可以在不安全的网络中对两个主机建立安全的加密连接。这个连接可用于终端验证,文件传输,以及与其他应用建立通道。Graphical X11应用可以通过SSH命令在远程安全运行。
其他的 SSH 命令
除了SSH客户端命令,这里有一些其他的SSH命令。每一个`都有自己的page。
- ssh-keygen - 为公钥验证创建钥匙对。 - ssh-copy-id - 在服务器上配置公钥的授权。 - ssh-agent - 用于保存**单点登录**私钥的代理程序 - ssh-add - 添加秘钥到代理的工具 - scp - 基于RCP-like命令接口的文件传输客户端 - sftp - 基于FTP-like命令接口的文件传输客户端 - sshd - OpenSSH 服务器
使用Linux SSH 客户端
Linux默认使用OpenSSH客户端。ssh命令可以登录到一个远程机器非常好用。为了登录到名为sample.ssh.com的远程计算机,在shell命令行输入下面的命令:
ssh sample.ssh.com
如果这是你第一次使用ssh连接远端的机器,你将看到下面的信息:
The authenticity of host 'sample.ssh.com' cannot be established. DSA key fingerprint is 04:48:30:31:b0:f3:5a:9b:01:9d:b3:a7:38:e2:b1:0c.(或者是RSA key fingerprint is SHA256:foo0a1b /bar0a1b ) Are you sure you want to continue connecting (yes/no)?
输入yes继续。这将添加服务到你的已知host文件中。(~/.ssh/known_hosts),会给出下面的提示信息:
Warning: Permanently added 'sample.ssh.com' (DSA) to the list of known hosts. (或者Warning: Permanently added 'fe.crm.test.weidiango.com' (RSA) to the list of known hosts. )
known_hosts文件的格式如下,以github为例:
github.com,13.229.188.59 ssh-rsa AAAAB3NzaC1yc2EA...
格式为 域名, ip地址 ssh-rsa/ssh-dsa public key
,在使用ssh登录远程主机时,远程主机会为你返回public key。
每一个服务器都有一个host key,通过上面的与验证相关的问题可以验证并且保存host key,所以下次你连接服务器时,host key可以识别出这是相同的服务器。
一旦连接建立,用户就完成了认证。通常来说,它会提醒你输入密码。对于一些服务器,你将输入硬编码的密码。
一旦验证通过,你将可以通过本地的终端,键入命令去控制远程的机器。
指定不同的用户名
可以通过命令指定不同的用户登录:
ssh alternative-username@sample.ssh.com
也可以用下面的语法表示:
ssh -l alternative-username sample.ssh.com
在服务器上执行远程命令
ssh命令可以在不登录的情况下执行远程机器的命令。语法如下:
ssh hostname command
例如,执行下面的命令
ls /tmp/doc
在主机sample.ssh.com,键入下面的命令
ssh sample.ssh.com ls /tmp/doc
或者是
ssh root@192.169.33.32 ls /etc
注意:
1.在不登录的情况下,没次都需要输入root用户的密码。
2.若不指定用户名,则会登录到你本地的当前用户名账号。
例如:frankdeiMac:~ frank$ ssh 192.169.33.32
会提示输入:frank@192.169.33.32's password:
在远程服务器验证完后,远程目录中的内容将会被展示出来,而且你将返回自己的本地shell 终端。-x 禁用Disables X11转发。
退出ssh登录
exit
SSH客户端配置文件
ssh的配置文件位于~/.ssh/config
。可查阅SSH client configuration file。
SSH公钥认证
ssh-keygen
以及ssh-copy-id
,macOS的公钥位于 ~/.ssh/id_rsa.pub
,windows的位于C:\Users\username\.ssh\id_rsa.pub
。
配置端口转发
可以本地转发(本地端口转发到服务器的Ip地址和端口)。可以远程转发(远程端口转发到客户端的Ip地址和端口)。
OpenSSH支持通过通道设备转发Unix 域名socket和IP 包,从而建立VPN(Virtual Private Network)。
SSH 命令行参数
下面是一些非常重要的OpenSSH客户端命令行参数。
- 1 使用第1版本的协议 - 2 使用第2版本的协议 - 4 仅使用IPv4地址 - 6 仅使用IPv6地址 - A 开启代理认证转发 - a 禁用代理认证转发 - C 使用数据压缩 - c cipher_spec 选择密码格式去加密session。 - D [bind_address:]port 动态应用级端口转发。这会分配一个套接字来侦听本地端口。当与此端口建立连接时,将通过安全通道转发连接,然后使用应用程序协议确定从远程计算机连接的位置。 - E log_file 添加一个debug日志到log_file而不是标准错误。 - F configfile 指定用户的ssh配置文件,默认的位于~/.ssh/config。 - g 允许远程主机链接到本地的转发端口。 - i identity_file 认证文件,公钥文件。 - J [user@]host[:port] 连接创建ssh连接到pjump主机(/iam/jump-host),然后建立一个TCP 转发到远程的机器。 - l login_name 指定登录到远程机器的用户名 - p 指定连接到远程机器的端口 - q 安静模式 - V 显示版本号 - v冗余模式 - X 执行X11转发
一个小历史
SSH在1990s取到了众多老旧的Unix和Linux命令行和协议。包括telnet,rlogin和rsh。
SSH运行在TCP/IP 22号端口。SSH诞生于1995年春天,这是一个telnet和FTP被大肆使用的年代。关于SSH如果得到22号端口,有一个很有趣的故事: how SSH got port 22
而关于SSH安全协议的由来,这里有一个作者本人的Youtube视频:https://youtu.be/OHBdKM7s5V4