FrankKai / FrankKai.github.io

FE blog
https://frankkai.github.io/
363 stars 39 forks source link

前端工程师必会之ssh命令 #91

Open FrankKai opened 6 years ago

FrankKai commented 6 years ago

1995夏,我用3个月开发出了ssh

SSH 协议

原理部分较为深奥,我将基于对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/