云网牛站
所在位置:首页 > Linux命令 > 详细的讲解Linux中的SSH(Secure Shell)命令,包括安装OpenSSH客户端

详细的讲解Linux中的SSH(Secure Shell)命令,包括安装OpenSSH客户端

2019-12-18 09:22:50作者:符天稿源:云网牛站

本文为你详细的讲解Linux操作系统中的SSH(Secure Shell)命令,主要是教你正常的使用SSH命令,包括在Linux下安装OpenSSH客户端。Secure Shell(SSH)是一种加密网络协议,用于客户端和服务器之间的加密连接,ssh客户端会创建到远程计算机上SSH服务器的安全连接,加密的连接可用于在服务器上执行命令,X11隧道、端口转发等。有许多SSH客户端免费和商业可用,其中OpenSSH是使用最广泛的客户端,它在所有主要平台上都可用,包括Linux、OpenBSD、Windows、macOS等。在本文中,我们将说明如何使用OpenSSH命令行客户端(ssh)登录到远程计算机并运行命令或执行其他操作。

详细的讲解Linux中的SSH(Secure Shell)命令,包括安装OpenSSH客户端

 

安装OpenSSH客户端

OpenSSH客户端程序称为ssh,可以从终端调用,OpenSSH客户端软件包还提供了与ssh命令一起安装的其他SSH实用程序,例如scp和sftp。以下介绍在Linux上安装OpenSSH Client的方法。

默认情况下,OpenSSH客户端已预安装在大多数Linux发行版中,如果你的系统未安装ssh客户端,则可以使用发行版的软件包管理器进行安装。

1、在Ubuntu和Debian上安装OpenSSH:

sudo apt update

sudo apt install openssh-client

参考:Ubuntu 18.04.2中安装vim、ifconfig、openssh-server、notepadqq

2、在CentOS和Fedora上安装OpenSSH:

sudo dnf install openssh-clients

附1:在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

附2:在macOS上安装OpenSSH Client的说明

macOS默认随附安装了OpenSSH客户端。

 

如何使用ssh命令

为了能够通过SSH登录到远程计算机,必须满足以下要求:

1、SSH服务器必须在远程计算机上运行。

2、必须在远程计算机防火墙中打开SSH端口。

3、你必须知道远程帐户的用户名和密码,该帐户需要具有适当的特权才能进行远程登录。

ssh命令的基本语法如下:

ssh [OPTIONS] [USER@]:HOST

要使用ssh命令,请打开你的终端或PowerShell,然后键入ssh,然后输入远程主机名:

ssh ssh.linuxize.com

首次通过SSH连接到远程计算机时,你将看到类似以下的消息:

The authenticity of host 'ssh.linuxize.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文件中。

键入“yes”以存储远程指纹,然后将提示你输入密码:

Warning: Permanently added 'ssh.linuxize.com' (ECDSA) to the list of known hosts.

dev@ssh.linuxize.com's password:

输入密码后,你将登录到远程计算机。

如果未提供用户名,则ssh命令将使用当前的系统登录名。

要以其他用户身份登录,请以以下格式指定用户名和主机:

ssh username@hostname

用户名也可以使用-l选项指定:

ssh -l username hostname

默认情况下,如果未提供任何端口,SSH客户端将尝试连接到22端口上的远程服务器,在某些服务器上,管理员正在更改默认SSH端口,以通过降低风险来为服务器添加额外的安全性,参考Linux下更改SSH端口、重启sshd及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.linuxize.com

User mike

Port 4422

通过键入ssh dev调用ssh客户端时,该命令将读取~/.ssh/config文件,并使用为dev主机指定的连接详细信息,在此示例中,ssh dev等效于以下内容:

ssh -p 4422 mike@dev.linuxize.com

 

公钥认证(Public Key Authentication)

SSH协议支持各种身份验证机制。

基于公用密钥的身份验证机制使你无需键入密码即可登录到远程服务器。

该方法通过生成一对用于身份验证的加密密钥来工作,私钥存储在客户端设备上,并将公钥传输到你要登录的每个远程服务器,必须将远程服务器配置为接受密钥身份验证。

如果本地计算机上还没有SSH密钥对,则可以通过键入以下内容生成一个:

ssh-keygen -t rsa -b 4096 -C "your_email@domain.com"

系统将要求你输入安全密码,是否要使用密码取决于你自己。

拥有密钥对后,将公共密钥复制到远程服务器:

ssh-copy-id username@hostname

输入远程用户密码,公共密钥将被添加到远程用户authorized_keys文件中。

密钥上传后,你可以登录到远程服务器而无需提示输入密码。

通过设置基于密钥的身份验证,可以简化登录过程并提高整体服务器安全性。

1、转发端口

SSH隧道或SSH端口转发是一种在客户端和服务器计算机之间创建加密的SSH连接的方法,通过该连接可以中继服务端口。

SSH转发对于传输使用未加密协议的服务(例如VNC或FTP),访问受地理限制的内容或绕过中间防火墙的网络数据很有用,基本上,你可以转发任何TCP端口并通过安全的SSH连接建立隧道流量。

SSH端口转发有三种类型。

1]、本地端口转发

FLocal端口转发使你可以将连接从客户端主机转发到SSH服务器主机,然后再转发到目标主机端口。

要创建本地端口转发,请将-L选项传递给ssh客户端:

ssh -L [LOCAL_IP:]LOCAL_PORT:DESTINATION_HOST:DESTINATION_PORT -N -f username@hostname

-f选项使ssh命令在后台运行,-N使它不执行远程命令。

2]、远程端口转发

远程端口转发与本地端口转发相反,它将端口从服务器主机转发到客户端主机,然后再转发到目标主机端口。

-L选项使ssh创建远程端口转发:

ssh -R [REMOTE:]REMOTE_PORT:DESTINATION:DESTINATION_PORT -N -f username@hostname

3]、动态端口转发

动态端口转发创建了一个SOCKS代理服务器,该服务器允许跨多个端口进行通信。

要创建动态端口转发(SOCKS),请将-D选项传递给ssh客户端:

ssh -R [LOCAL_IP:]LOCAL_PORT  -N -f username@hostname

 

结论

要通过SSH连接到远程服务器,请使用ssh命令,后跟远程用户名和主机名(ssh username@hostname),同时要指出的是:知道使用ssh命令对于管理远程服务器至关重要。

 

相关主题

使用SELinux强制更改CentOS、RHEL 7/8、Fedora上的SSH端口

Linux命令子频道
精选文章
热门文章