如何在Linux中使用SSH命令
SSH是一种流行的,功能强大的,基于软件的网络安全方法。
它用于登录到远程计算机并在远程计算机上执行命令。
每当计算机将数据发送到网络时,ssh都会自动对其进行加密。
它的设计和创建是为了在远程访问另一台计算机时提供最佳的安全性。
默认情况下,SSH服务器侦听标准TCP端口22.
要使用SSH,目标计算机应已安装SSH服务器应用程序,因为SSH是客户端-服务器模型。
在本教程中,我们将了解Linux系统上的SSH命令,配置,用法和选项,以连接到远程服务器。
安装SSH
默认情况下,现代Linux应该已安装SSH。
如果不是,我们可以手动安装。
安装SSH的最简单方法是通过Linux软件包管理器。
在Ubuntu/Debian上
安装ssh-client
$sudo apt-get install openssh-client
安装ssh-server
$sudo apt-get install openssh-server
在RedHat/CentOS上
# yum install openssh-server openssh-clients
安装SSH后,我们可以通过从Linux控制台键入ssh进行检查。
1)SSH命令
不加选择地运行SSH
使用SSH的常见方法是没有任何选择。
只需输入“ ssh”即可。
这是一个示例:
$ssh 192.168.0.103
首次连接到目标主机时,ssh会向我们确认目标主机的真实性。
如果回答“否”,则SSH将不会继续,而如果我们说“是”,则SSH将继续。
下次登录同一主机时,SSH不会要求我们进行确认。
默认情况下,主机的真实性保存在每个用户的/home/user/.ssh文件夹下。
指定用于登录的用户名
默认情况下,ssh将尝试使用活动用户作为用户名进行连接。
在上一个命令中,ssh将尝试使用名为“ pungki”的用户名登录服务器。
这是因为客户端上的用户“ pungki”正在运行ssh客户端。
如果在目标主机中没有名为“ pungki”的用户,该怎么办?
然后,我们必须提供目标主机中存在的用户名。
要从头开始指定用户名,请使用-l选项
$ssh -l leni 192.168.0.103
我们也可以这样输入:
$ssh [email protected]
指定端口
SSH的默认端口为22.
大多数现代Linux都开放了端口22.
如果在不定义端口的情况下运行ssh,则ssh将通过端口22定向请求。
但是某些系统管理员可能会更改默认的SSH端口。
假设该端口现在为1234.
要联系该主机,请使用-p选项,然后使用SSH端口。
$ssh 192.168.0.103 -p 1234
要更改端口号,我们需要修改/etc/ssh/ssh_config。
找到这行:
Port 22
将其更改为另一个端口,例如上面的1234.
然后重新启动SSH服务。
请求压缩每个数据
使用此选项,将压缩通过SSH发送和接收的所有数据。
数据仍被加密。
要将压缩与SSH一起使用,请使用-C选项。
$ssh -C 192.168.0.103
如果连接速度较慢(例如使用调制解调器),此选项将很有用。
但是,当我们使用快速连接(例如LAN或者更高级别)时,压缩将减慢传输速率。
可以使用-o选项,然后使用CompressionLevel选项来控制压缩级别。
但是此选项仅适用于SSH-1.
定义密码算法
SSH提供了一些要使用的密码算法。
这些算法可以在/etc/ssh/ssh_config或者~/.ssh/config文件(如果存在)中看到。
假设我们要使用河豚算法对SSH会话进行加密。
然后,我们可以将此行放入/etc/ssh/ssh_config或者~/.ssh/config文件中:
Cipher blowfish
默认情况下,SSH将使用3des算法
打开调试模式
当我们无法连接到远程主机时,最好进行调试并查找导致问题的确切错误消息。
使用-v选项调试ssh客户端。
$ssh -v 192.168.0.103
绑定源地址
如果客户端具有两个以上IP地址,则我们可能不知道使用哪个IP地址来建立与SSH服务器的连接。
为了解决这种情况,我们可以使用-b选项,它将IP地址绑定到SSH连接。
该IP地址将用作连接的源地址。
$ssh -b 192.168.0.200 -l leni 192.168.0.103
在服务器端,我们可以使用netstat检查与服务器的已建立连接。
我们看到建立了192.168.0.200连接。
更改默认配置文件
默认情况下,ssh将使用/etc/ssh/ssh_config中的ssh配置文件。
该文件适用于系统范围。
如果要将特定设置应用于特定用户,则应将其放在~/.ssh/config文件中。
如果看不到它,则可以创建它。
这是自定义ssh_config的示例。
该配置位于/home/pungki目录中。
Host 192.168.0.* ForwardX11 yes PasswordAuthentication yes ConnectTimeout 10 Ciphers aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-cbc,3des-cbc Protocol 2 HashKnownHosts yes
要使用特定的配置文件,我们可以使用-F选项。
$ssh -F /home/pungki/my_ssh_config 192.168.0.101
使用SSH X11转发
SSH有三种类型的端口转发:
1.本地端口转发:来自SSH客户端的连接通过SSH服务器转发,然后转发到目标服务器
2.远程端口转发:来自SSH服务器的连接通过SSH客户端转发,然后转发到目标服务器
3.动态端口转发:来自各种程序的连接先通过SSH客户端转发,然后通过SSH服务器转发,最后再转发到多个目标服务器
本地端口转发
ssh -L 8080:172.18.19.23:80 -L 12345:172.18.19.20:80
这将转发两个连接,一个连接到172.18.19.23,另一个连接到172.18.19.20。
将浏览器指向http://localhost:8080 /将从172.18.19.23下载页面,将浏览器指向http://localhost:12345 /将从172.18.19.20下载页面。
远程端口转发
ssh -R 5900:localhost:5900 [email protected]
-R选项指定远程端口转发。
在SSH会话期间,ec2-52-66-84-114.ap-south-1.compute.amazonaws.com可以通过将VNC客户端连接到他计算机上的端口5900来访问桌面。
设置了共享桌面)
动态端口转发
ssh -C -D 1001 [email protected]
-D选项指定动态端口转发。
1001是标准的SOCKS端口。
尽管可以使用任何端口号,但是某些程序仅在使用1001时才可以使用。
-C启用压缩,这在代理主要基于文本的信息(例如Web浏览)时加快了隧道传输速度,但在代理二进制信息时可能降低传输速度(例如下载文件)。
接下来,我们将告诉Firefox使用代理:
go to Edit -> Preferences -> Advanced -> Network -> Connection -> Settings... check "Manual proxy configuration" make sure "Use this proxy server for all protocols" is cleared clear "HTTP Proxy", "SSL Proxy", "FTP Proxy", and "Gopher Proxy" fields enter "127.0.0.1" for "SOCKS Host" enter "1001" (or whatever port you chose) for Port.
转发GUI程序
ssh -X [email protected]
建立连接后,在SSH命令行上输入GUI程序的名称:
firefox &
另一个例子
ssh -X [email protected]
[ec2-user@ip-172-31-13-103 ~]$xeyes &
值得信赖的X11转发
如果我们确定网络是安全的,则可能要使用Trusted X11转发。
这意味着远程X11客户端将拥有对原始X11显示器的完全访问权限。
要使用此选项,我们可以使用-Y选项。
$ssh -Y [email protected]
2)SSH选项
让我们检查一下所有可用的ssh选项。
StrictHostKeyChecking
如果要绕过此验证步骤,可以在命令行上将“ StrictHostKeyChecking”选项设置为“ no”。
此选项禁用提示,并自动将主机密钥添加到~/.ssh/known_hosts文件。
$ssh -oport=922 -o "StrictHostKeyChecking=no" [email protected]
连接超时
for ip in ${IP} ; do ssh -o BatchMode=yes -o StrictHostKeyChecking=no -o ConnectTimeout=10 -l ${USERNAME} ${SCRIPT_HOST} "${COMMAND} -i $ip || echo timeout" >> ./myscript.out done
我正在执行一个脚本,该脚本通过远程主机上的无密码SSH连接。
我想设置一个超时,以便如果远程主机花了无限的时间来运行,我想退出该ssh会话并在我的sh脚本中继续其他行。
批处理模式
如果使用ssh -o“ BatchMode yes”,并且启用了无密码连接,则该命令将在远程成功执行,否则它将返回错误并继续。
使用SSH的批处理模式命令执行-成功案例
ssh -o "batchmode=yes" [email protected] who
[注意:这将显示远程主机的who命令的输出]
使用SSH的批处理模式命令执行-失败案例
$ssh -o "batchmode=yes" [email protected] who Permission denied (publickey,password). [ec2-user@ip-172-31-13-103 ~]$
注意:如果我们不使用-o“ BatchMode yes”,则上述命令会要求输入我在远程主机上的帐户的密码。
这是使用BatchMode yes选项的主要区别。
绑定IP示例
ssh -oPort=922 -oBindAddress=172.18.XX.X [email protected]
查找SSH命令的版本
我们可以使用ssh的-V选项找到安装在unix系统上的SSH版本。
ssh -V [email protected] OpenSSH_5.3p1, OpenSSL 1.0.1e-fips 11 Nov 2013
如下所示:
在详细模式下运行ssh命令的-v选项。
使ssh打印有关其进度的调试消息。
这有助于调试连接,身份验证和配置问题。
多个-v选项增加详细程度,最大值为3.
3)带有示例的SSH配置
SSH有两个主要的配置文件。
~/.ssh/config(每个用户的配置文件)
SSH客户端使用此文件。
该文件必须具有严格的权限:用户读/写,并且其他人不能访问。
我们使用此文件中的所有参数来远程访问另一台计算机。
此文件称为客户端配置文件
[shaha@oc8535558703 ~]$ls -lrt ~/.ssh/config -rw-------. 1 shaha shaha 988 May 19 23:54 /home/shaha/.ssh/config [shaha@oc8535558703 ~]$
/etc/ssh/ssh_config(系统范围的配置文件)
该文件为用户配置文件中未指定的那些值以及没有配置文件的用户提供默认值。
该文件必须是世界可读的。
此文件中定义的所有参数都是世界可读的。
[root@oc8535558703 ~]# ls -rlt /etc/ssh/ssh_config -rw-r--r--. 1 root root 2047 Apr 26 16:36 /etc/ssh/ssh_config [root@oc8535558703 ~]#
SSH配置文件选项
/etc/ssh/ssh_config文件是Open SSH的系统范围的配置文件,可用于设置选项
修改客户端程序的操作。
该文件包含关键字/值对,每行一对,关键字不区分大小写。
以下是配置ssh以获得最高安全性的最重要的关键字。
Edit the ssh_config file, vi /etc/ssh/ssh_config and add/or change, if necessary the following parameters: # Site-wide defaults for various options Host * ForwardAgent no ForwardX11 no RhostsAuthentication no RhostsRSAAuthentication no RSAAuthentication yes PasswordAuthentication yes FallBackToRsh no UseRsh yes BatchMode yes CheckHostIP yes StrictHostKeyChecking no IdentityFile ~/.ssh/identity Port 922
配置文件参数说明
Host *
选项主机将配置文件中所有转发的声明和选项限制为仅与那些在关键字后给出的模式之一匹配的主机。
模式*表示所有主机,直到下一个Host关键字。
使用此选项,可以在同一ssh_config文件中为不同的主机设置不同的声明。
ForwardAgent no
选项ForwardAgent指定应将哪个连接身份验证代理(如果有的话)转发到远程计算机。
ForwardX11 no
选项ForwardX11适用于使用Xwindow GUI并希望将X11会话自动重定向到远程计算机的用户。
由于我们设置了服务器并且未安装GUI,因此可以安全地关闭此选项。
ssh -o "ForwardX11=no" [email protected]
RhostsAuthentication no
选项RhostsAuthentication指定我们是否可以尝试使用基于rhosts的身份验证。
由于rhosts身份验证不安全,因此我们不应使用此选项。
ssh -o "RhostsAuthentication=no" [email protected]
RhostsRSAAuthentication no
选项RhostsRSAAuthentication指定是否尝试与RSA主机认证一起使用rhosts认证。
ssh -o "RhostsRSAAuthentication=no" [email protected]
RSAAuthentication yes
选项RSAAuthentication指定是否尝试RSA身份验证。
必须将此选项设置为yes,以提高会话的安全性。
RSA使用通过ssh-keygen1utility创建的公钥和私钥对进行身份验证。
ssh -o "RSAAuthentication=yes" [email protected]
PasswordAuthentication yes
选项PasswordAuthentication指定是否应使用基于密码的身份验证。
为了强大的安全性。
此选项必须始终设置为yes。
此参数可保护服务器与其他服务器的连接
没有密码,没有人连接到服务器。
ssh -o "PasswordAuthentication=yes" [email protected]
FallBackToRsh no
选项FallBackToRsh指定如果与ssh守护程序的连接失败,则应自动使用rsh。
回顾rsh服务是不安全的,此选项必须始终设置为no。
ssh -o "FallBackToRsh=no" [email protected]
UseRsh no
UseRsh选项指定应在此主机上使用rlogin/rsh服务。
与FallBackToRsh方法一样,出于明显的原因,必须将其设置为no。
ssh -o "UseRsh=no" [email protected]
BatchMode no
选项BatchMode指定是否将禁用在连接时查询的用户名和密码。
当我们创建脚本并且不想提供密码时,此选项很有用。
例如使用scp命令通过网络进行备份的脚本。
ssh -o "BatchMode=no" [email protected]
CheckHostIP yes
选项CheckHostIP指定ssh是否另外检查连接到服务器的主机IP地址以检测DNS欺骗。
建议我们将此选项设置为“是”。
ssh -o "CheckHostIP=yes" [email protected]
StrictHostKeyChecking no
选项StrictHostKeyChecking指定ssh是否将自动将新的主机密钥添加到$HOME/.ssh/known_hosts文件,或者从不自动将新的主机密钥添加到主机文件。
设置为yes时,此选项可最大程度地防御特洛伊木马攻击。
使用此选项的一个有趣过程是,在开始时将其设置为no,允许ssh在连接到它们时自动将所有通用主机添加到主机文件中,然后返回以将其设置为yes以利用此功能。
ssh -o "StrictHostKeyChecking=no" [email protected]
IdentityFile~/.ssh/identity
选项IdentityFile指定要读取的备用RSA身份验证标识文件。
另外,可以在配置文件ssh_config中指定多个标识文件。
Cipher blowfish
密码选项指定用于加密sessios的密码。
河豚使用64位块和最多448位的密钥。
EscapeChar ~
选项EscapeChar指定要暂停的会话转义字符。
用于参数测试的示例配置文件
我们使用多个参数创建/export/oracle/db/config/ssh/config.922pw进行测试。
[shah @ hostname:~] $cat /export/oracle/db/config/ssh/config.922pw
# Site-wide defaults for some commonly used options. For a comprehensive # list of available options, their meanings and defaults, please see the # ssh_config(5) man page. VerifyHostKeyDNS no StrictHostKeyChecking no UserKnownHostsFile /dev/null Host * Host 172.23.6.117 172.23.XX 172.24.XX 172.24.XX 10.56.xx.xx Protocol 2,1 Compression yes CompressionLevel 7 IdentityFile /var/dcs_6.0/db/dcs/config/ssh/ssh_keys/id_rsa_ime_prod CheckHostIP no PreferredAuthentications publickey,keyboard-interactive,password LogLevel ERROR ForwardAgent no ForwardX11 yes RhostsAuthentication no RhostsRSAAuthentication no RSAAuthentication yes PasswordAuthentication yes FallBackToRsh no UseRsh no BatchMode no CheckHostIP yes StrictHostKeyChecking no Port 922 user cgi Cipher blowfish IgnoreUserKnownHosts yes UserKnownHostsFile no StrictHostKeyChecking no UserKnownHostsFile=/dev/null ServerAliveInterval 100 Compression yes CompressionLevel 5 CheckHostIP no
当我们尝试使用配置文件连接远程服务器时,ssh连接中的所有参数调用。
请通过ssh与配置文件的连接找到以下内容。
[user@hostname:.ssh]$ssh -F /export/oracle/db/config/ssh/config.922pw [email protected] Last unsuccessful login: Fri May 15 12:10:33 WAT 2015 on ssh from 10.14.43.39 Last login: Fri May 15 14:55:14 WAT 2015 on ssh from 172.27.0.XX [user@hostname:.ssh]$