SSH命令
安全shell(SSH)是一种加密网络协议,用于客户端和服务器之间的加密连接。
ssh客户端会创建到远程计算机上SSH服务器的安全连接。
加密的连接可用于在服务器上执行命令,X11隧道,端口转发等。
有许多SSH客户端免费和商业可用,其中OpenSSH是使用最广泛的客户端。
它在所有主要平台上都可用,包括Linux,OpenBSD,Windows,macOS等。
在本文中,我们将说明如何使用OpenSSH命令行客户端('ssh')登录到远程计算机并运行命令或者执行其他操作。
安装OpenSSH客户端
OpenSSH客户端程序称为“ ssh”,可以从终端调用。
OpenSSH客户端软件包还提供了与“ ssh”命令一起安装的其他SSH实用程序,例如“ scp”和“ sftp”。
在Linux上安装OpenSSH Client
默认情况下,OpenSSH客户端已预安装在大多数Linux发行版中。
如果系统未安装ssh客户端,则可以使用发行版的软件包管理器进行安装。
在Ubuntu和Debian上安装OpenSSH
sudo apt updatesudo apt install openssh-client
在CentOS和Fedora上安装OpenSSH
sudo dnf install openssh-clients
在Windows 10上安装OpenSSH Client
大多数Windows用户正在使用Putty通过SSH连接到远程计算机。
但是,Windows 10的最新版本包括OpenSSH客户端和服务器。
这两个软件包都可以通过GUI或者PowerShell进行安装。
要找到OpenSSH软件包的确切名称,请键入以下命令:
Get-WindowsCapability -Online | ? Name -like 'OpenSSH*'
该命令应返回如下内容:
Name : OpenSSH.Client~~~~0.0.1.0 State : NotPresent Name : OpenSSH.Server~~~~0.0.1.0 State : NotPresent
知道软件包名称后,通过运行以下命令进行安装:
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
成功后,输出将如下所示:
Path : Online : True RestartNeeded : False
在macOS上安装OpenSSH Client
macOS附带默认情况下安装的OpenSSH客户端。
如何使用“ ssh”命令
为了能够通过SSH登录到远程计算机,必须满足以下要求:
- SSH服务器必须在远程计算机上运行。
- SSH端口必须在远程计算机防火墙中打开。
- 我们必须知道远程帐户的用户名和密码。该帐户需要具有适当的特权才能进行远程登录。
ssh命令的基本语法如下:
ssh [OPTIONS] [USER@]:HOST
要使用“ ssh”命令,请打开终端或者PowerShell,然后键入“ ssh”,然后输入远程主机名:
ssh ssh.theitroad.com
首次通过SSH连接到远程计算机时,我们将看到类似以下的消息。
The authenticity of host 'ssh.theitroad.com (192.168.121.111)' can't be established. ECDSA key fingerprint is SHA256:Vybt22mVXuNuB5unE++yowF7lgA/9/2bLSiO3qmYWBY. Are you sure you want to continue connecting (yes/no)?
每个主机都有一个唯一的指纹,该指纹存储在“~/.ssh/known_hosts”文件中。
输入“是”以存储远程指纹,系统将提示我们输入密码。
Warning: Permanently added 'ssh.theitroad.com' (ECDSA) to the list of known hosts. [email protected]'s password:
输入密码后,我们将登录到远程计算机。
如果未提供用户名,则“ ssh”命令将使用当前的系统登录名。
要以其他用户身份登录,请以以下格式指定用户名和主机:
ssh username@hostname
用户名也可以使用'-l'选项指定:
ssh -l username hostname
默认情况下,如果未提供任何端口,则SSH客户端将尝试连接到端口22上的远程服务器。
在某些服务器上,管理员正在更改默认SSH端口,以通过降低以下风险来为服务器添加另外的安全性:自动攻击。
要在非默认端口上进行连接,请使用'-p'选项指定端口:
ssh -p 5522 username@hostname
如果遇到身份验证或者连接问题,请使用'-v'选项告诉'ssh'打印调试消息:
ssh -v username@hostname
要提高详细程度,请使用'-vv'或者'-vvv'。
“ ssh”命令接受许多选项。
有关所有选项的完整列表,请在终端中键入“ man ssh”,以阅读“ ssh”手册页。
SSH配置文件
如果我们每天都通过SSH连接到多个远程系统,则会发现记住所有的远程IP地址,不同的用户名,非标准端口和各种命令行选项非常困难,即使不是不可能。
OpenSSH客户端读取每个用户配置文件('~/.ssh/config')中设置的选项。
在此文件中,我们可以为连接到的每台远程计算机存储不同的SSH选项。
SSH配置示例如下所示:
Host dev HostName dev.theitroad.com User mike Port 4422
通过键入“ ssh dev”调用ssh客户端时,该命令将读取“~/.ssh/config”文件,并使用为开发主机指定的连接详细信息。
在此示例中,“ ssh dev”等效于以下内容:
ssh -p 4422 [email protected]
有关更多信息,请查看有关SSH配置文件的文章。
SSH协议支持各种身份验证机制。
基于公用密钥的身份验证机制使我们无需键入密码即可登录到远程服务器。
此方法通过生成用于身份验证的一对加密密钥来工作。
私钥存储在客户端设备上,而公钥则转移到我们要登录的每个远程服务器上。
必须将远程服务器配置为接受密钥身份验证。
如果本地计算机上还没有SSH密钥对,则可以通过输入以下内容生成一个:
ssh-keygen -t rsa -b 4096 -C "[email protected]"
系统将要求我们输入安全密码。
是否要使用密码取决于我们自己。
拥有密钥对后,将公共密钥复制到远程服务器:
ssh-copy-id username@hostname
输入远程用户密码,公共密钥将添加到远程用户的“ authorized_keys”文件中。
密钥上传后,我们可以登录到远程服务器而无需提示输入密码。
通过设置基于密钥的身份验证,可以简化登录过程并提高整体服务器安全性。
转发端口
SSH隧道或者SSH端口转发是一种在客户端和服务器计算机之间创建加密SSH连接的方法,通过该连接可以中继服务端口。
SSH转发对于传输使用未加密协议的服务(例如VNC或者FTP),访问受地理限制的内容或者绕过中间防火墙的网络数据很有用。
基本上,我们可以转发任何TCP端口并通过安全的SSH连接建立隧道流量。
SSH端口转发有三种类型:
本地端口转发
本地端口转发使我们可以将连接从客户端主机转发到SSH服务器主机,然后再转发到目标主机端口。
要创建本地端口转发,请将'-L'选项传递给'ssh'客户端:
ssh -L [LOCAL_IP:]LOCAL_PORT:DESTINATION_HOST:DESTINATION_PORT -N -f username@hostname
-f选项告诉'ssh'命令在后台运行,'-N'告诉它不执行远程命令。
远程端口转发
远程端口转发与本地端口转发相反。
它将端口从服务器主机转发到客户端主机,然后再转发到目标主机端口。
'-L'选项告诉'ssh'创建远程端口转发:
ssh -R [REMOTE:]REMOTE_PORT:DESTINATION:DESTINATION_PORT -N -f username@hostname
动态端口转发
动态端口转发创建了一个SOCKS代理服务器,该服务器允许跨多个端口进行通信。
要创建动态端口转发(SOCKS),请将'-D'选项传递给ssh客户端:
ssh -D [LOCAL_IP:]LOCAL_PORT -N -f username@hostname
有关更多详细信息和分步说明,请查看有关如何设置SSH隧道(端口转发)的文章。