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
参考:https://www.ssh.com/ssh/command/
期待和大家交流,共同进步,欢迎大家加入我创建的与前端开发密切相关的技术讨论小组:
- SegmentFault技术圈:ES新规范语法糖
- SegmentFault专栏:趁你还年轻,做个优秀的前端工程师
- 知乎专栏:趁你还年轻,做个优秀的前端工程师
- Github博客: 趁你还年轻233的个人博客
- 前端开发QQ群:660634678
- 微信公众号: 人兽鬼 / excellent_developers
努力成为优秀前端工程师!
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。