ssh

OpenSSH SSH客户端(远程登录程序)

语法

 ssh [-1246AaCfgKkMNnqsTtVvXxYy] [-b bind_address] [-c cipher_spec]
        [-D [bind_address:]port] [-e escape_char] [-F configfile]
           [-i identity_file] [-L  [bind_address:]port:host:hostport]
              [-l login_name] [-m mac_spec] [-O ctl_cmd] [-o option] 
                 [-p port] [-R [bind_address:]port:host:hostport]
                    [-S ctl_path] [-w local_tun[:remote_tun]]
                       [user@]hostname [command]

ssh(SSH客户端)是一个用于登录远程计算机并在远程计算机上执行命令的程序。它旨在取代rlogin和rsh,并通过不安全的网络在两个不受信任的主机之间提供安全的加密通信。连接任意TCP端口也可以通过安全通道转发。

ssh连接并登录到指定的主机名(带有可选的用户名)。用户必须使用多种方法之一向远程机器证明他/她的身份,具体取决于所使用的协议版本(见下文)。

如果指定了command,则在远程主机而不是登录shell上执行:

 -1      强制ssh仅尝试协议版本1.

 -2      强制ssh仅尝试协议版本2.

 -4      强制ssh仅使用IPv4地址.

 -6      强制ssh仅使用IPv6地址.

 -A      启用转发身份验证代理连接

 -a      禁用转发身份验证代理连接。

 -b bind_address

         使用本地机器上的bind_address作为连接的源地址。只适用于具有多个地址的系统。

 -C      要求压缩所有资料(包含 stdin, stdout,stderr 和 X11 和 TCP/IP 连接) 压缩演算规则与 gzip 相同,
         '但是压缩的等级不能控制。
         在调制解调器或 联机速度很慢的地方,
         压缩是个很好的选择,但如果读者的网络速路很 快的话,速度反而会慢下来

 -c cipher_spec

         选择加密会话的密码规范:
         协议版本1允许指定单个密码,支持的值是“3des”、“blowfish”和“des”。
         3des (triple-des)是一种加密-解密-加密的三种加密方式,有三个不同的密钥,它被认为是安全的。
         blowfish是一种快速分组密码;它看起来非常安全,比3des快得多。
         为了与不支持3des密码的遗留协议1实现互操作性,des仅在ssh客户机中受支持,
         由于密码学的弱点,它的使用被强烈禁止,默认值是“3des”。

         对于协议版本2,cipher_spec是按优先顺序列出的逗号分隔的密码列表

 -D [bind_address:]port

         指定本地“动态”应用程序级端口转发。
         这可以通过分配一个套接字来监听本地端上的端口,可以选择绑定到指定的bind_address。
         无论何时连接到此端口,连接都通过安全通道转发,然后使用应用程序协议确定从远程计算机连接到何处。
         目前支持SOCKS4和SOCKS5协议,ssh将充当SOCKS服务器。
         只有root可以转发特权端口,动态端口传输也可以在配置文件中指定

         IPv6地址可以用另一种语法来指定:[bind_address/]port 或者用方括号括住地址。
         只有超级用户可以转发特权端口。默认情况下,本地端口根据GatewayPorts设置进行绑定。
         但是,可以使用显式的bind_address将连接绑定到特定的地址。
         “localhost”的bind_address表示侦听端口只能绑定到本地使用,
         而空地址或' * '表示端口应该可以从所有接口访问。

 -e escape_char

        使用pty设置会话的转义字符(默认:' ~ ')。
        转义字符只能在一行的开头识别。
        转义字符后跟点(' . ')关闭连接;
        然后control-Z挂起连接;然后它自己发送转义字符一次。
        将字符设置为“none”将禁用任何转义,并使会话完全透明。

 -F configfile
         指定可选的每个用户配置文件。
         如果在命令行中给出了配置文件,那么系统范围内的配置文件(/etc/ssh/ssh_config)将被忽略。
         每个用户配置文件的默认值是~/.ssh/config。

 -f      ssh在命令执行之前转到后台。
         如果ssh要请求密码或口令,但用户希望将其放在后台,那么这很有用。
         这意味着-n,在远程站点启动X11程序的推荐方法是使用ssh -f主机xterm之类的东西

         如果ExitOnForwardFailure配置选项设置为“yes”,
         那么使用-f启动的客户端将等待所有远程端口转发成功建立后再将自己放置在后台

 -g      允许远程主机连接到本地转发端口。

 -I smartcard_device

         指定ssh用于与用于存储用户私有RSA密钥的智能卡通信的设备。
         此选项仅在对智能卡设备进行编译时可用(默认情况下不支持)。

 -i identity_file
         选择一个文件,从该文件中读取用于RSA或DSA身份验证的标识(私钥)。
         默认值是~/,协议版本1的ssh/identity和~/.ssh /id_rsa和~/,
         协议版本2的ssh/id_dsa,身份文件也可以在配置文件中的每个主机上指定。
         可以有多个-i选项(以及在配置文件中指定的多个标识)。

 -K      启用基于GSSAPI的身份验证和将GSSAPI凭证转发(委托)到服务器。

 -k      禁止将GSSAPI凭证转发(委托)到服务器。

 -L [bind_address:]port:host:hostport

         指定本地(客户端)主机上的端口,将被转发到远程端上的主机和端口。
         这可以通过分配一个套接字来监听本地端上的端口,可以选择绑定到指定的bind_address。
         无论何时连接到此端口,都将通过安全通道转发连接,并从远程计算机连接到主机端口。
         端口传输也可以在配置文件中指定。
         IPv6地址可以用另一种语法来指定:[bind_address/]port/host/hostport或将地址括在方括号中。
         只有超级用户可以转发特权端口。
         默认情况下,本地端口根据GatewayPorts设置进行绑定。
         但是,可以使用显式的bind_address将连接绑定到特定的地址。
         “localhost”的bind_address表示侦听端口只能绑定到本地使用,
         而空地址或' * '表示端口应该可以从所有接口访问。

 -l login_name

         指定要在远程计算机上登录的用户。
         这也可以在配置文件中以每个主机为指定。

 -M      将ssh客户机放置到“主”模式以进行连接共享。
         多个-M选项使ssh进入“主”模式,在接受从连接之前需要进行确认。
         详细信息请参阅ssh_config(5)中的ControlMaster描述。

 -m mac_spec

         对于协议版本2,可以按照优先顺序指定逗号分隔的MAC(消息身份验证代码)算法列表.

 -N      不要执行远程命令。这对于转发端口非常有用

 -n      从/dev/null重定向stdin(实际上,防止从stdin读取)

 -O ctl_cmd
         控制活动连接多路复用主进程

 -o option

         可用于以配置文件中使用的格式提供选项.  
         这对于指定没有单独命令行标志的选项非常有用。
         有关下面列出的选项及其可能的值的详细信息

               AddressFamily
               BatchMode
               BindAddress
               ChallengeResponseAuthentication
               CheckHostIP
               Cipher
               Ciphers
               ClearAllForwardings
               Compression
               CompressionLevel
               ConnectionAttempts
               ConnectTimeout
               ControlMaster
               ControlPath
               DynamicForward
               EscapeChar
               ExitOnForwardFailure
               ForwardAgent
               ForwardX11
               ForwardX11Trusted
               GatewayPorts
               GlobalKnownHostsFile
               GSSAPIAuthentication
               GSSAPIDelegateCredentials
               HashKnownHosts
               Host
               HostbasedAuthentication
               HostKeyAlgorithms
               HostKeyAlias
               HostName
               IdentityFile
               IdentitiesOnly
               KbdInteractiveDevices
               LocalCommand
               LocalForward
               LogLevel
               MACs
               NoHostAuthenticationForLocalhost
               NumberOfPasswordPrompts
               PasswordAuthentication
               PermitLocalCommand
               Port
               PreferredAuthentications
               Protocol
               ProxyCommand
               PubkeyAuthentication
               RekeyLimit
               RemoteForward
               RhostsRSAAuthentication
               RSAAuthentication
               SendEnv
               ServerAliveInterval
               ServerAliveCountMax
               SmartcardDevice
               StrictHostKeyChecking
               TCPKeepAlive
               Tunnel
               TunnelDevice
               UsePrivilegedPort
               User
               UserKnownHostsFile
               VerifyHostKeyDNS
               VisualHostKey
               XAuthLocation

 -p port
         远程主机上连接的端口

 -q      安静模式。
        导致大多数警告和诊断消息被禁止,只显示致命错误。
        如果给出了第二个-q,那么即使是致命错误也会被禁止,
        除了那些仅仅由于错误的参数而产生的错误。

 -R [bind_address:]port:host:hostport

         指定远程(服务器)主机上的端口,将被转发到本地端上的主机和端口

 -S ctl_path

         指定用于连接的控件套接字的位置
         共享,或字符串“none”以禁用连接共享

 -s      用于请求远程系统上的子系统调用。
         子系统是SSH2协议的一个特性,它有助于使用SSH作为其他应用程序的安全传输(例如。sftp(1))。
         子系统被指定为远程命令。

 -T      禁用 pseudo-tty 分配.

 -t      强制pseudo-tty 分配.  这可以用于在远程机器上执行任意基于屏幕的程序,
         这非常有用,例如在实现菜单服务时。
         多个-t选项强制分配tty,即使ssh没有本地tty

 -V      显示版本号并退出

 -v      详细模式。打印有关它的调试消息,这有助于调试,身份验证和配置问题

 -w local_tun[:remote_tun]
         在客户机(local_tun)和服务器(remote_tun)之间使用指定的
         tun(4)设备进行请求隧道设备转发.

         设备可以通过数字ID或关键字“any”指定,
         后者使用下一个可用的隧道设备。
         如果未指定remote_tun,则默认为“any”。
         参见ssh_config(5)中的隧道和隧道设备指令。
         如果隧道指令未设置,它将被设置为默认隧道模式,即“点对点”.

 -X      启用X11转发.  这也可以在配置文件中的每个主机上指定.

         X11转发应谨慎启用。
         能够绕过远程主机上的文件权限(对于用户的X授权数据库)的用户可以通过转发连接访问本地X11显示。
         然后攻击者可以执行诸如按键监视之类的活动。

         因此,默认情况下,X11转发受到X11安全扩展限制。请参考ssh -Y

         更多信息,请参考ssh_config(5)中的forwardx11可信指令。

 -x      禁用X11转发.

 -Y      启用受信任的X11转发.  受信任的X11转发不受X11安全扩展控件的约束.

 -y      使用syslog(3)系统模块发送日志信息。默认情况下,该信息被发送到stderr。

 ssh还可以从每个用户的配置文件和系统范围的配置文件中获取配置数据。
 文件格式和配置选项在ssh_config(5)中描述.

 ssh以远程命令的退出状态退出,如果出现错误,则以255退出

认证

OpenSSH SSH客户端支持SSH协议1和2.协议2是默认设置,如果检测到协议2不受支持,则ssh会回退到协议1。可以使用ssh_config(5)中的Protocol选项更改这些设置,或使用-1和-2选项强制执行(参见上文)。两种协议都支持类似的身份验证方法,但协议2是首选,因为它提供了额外的机密性机制(流量使用AES,3DES,Blowfish,CAST128或Arcfour加密)和完整性(hmac-md5,hmac-sha1,umac-64) ,hmac-ripemd160)。协议1缺乏确保连接完整性的强大机制。

可用于身份验证的方法有:基于gssapi的身份验证、基于主机的身份验证、公钥身份验证,
质询-响应身份验证和密码身份验证,按照上面指定的顺序尝试身份验证方法,不过协议2有一个配置选项来更改默认顺序.

基于主机的身份验证如下所示:如果用户登录的计算机列在/etc/hosts中枚或/etc/ssh/shosts.远程机器上的equiv,并且两边的用户名是相同的,或者如果文件/.rhosts或/.shosts存在于远程机器上用户的主目录中,其中包含一行,其中包含客户端机器的名称和该机器上用户的名称,考虑使用该用户进行登录。此外,服务器必须能够验证客户机的主机密钥(请参阅/etc/ssh_known_hosts和/的描述),允许登录的ssh/known_hosts文件,这种身份验证方法消除了IP欺骗、DNS欺骗和路由欺骗造成的安全漏洞。[给管理员的通知:/etc/hosts.equiv,/.rhosts和rlogin/rsh协议通常具有内在的不安全性,如果需要安全性,应该禁用它们。

公钥身份验证的工作原理如下:该方案基于公钥密码体制,使用使用单独密钥进行加密和解密的加密系统,从加密密钥派生解密密钥是不可行的,其思想是,每个用户都创建一个用于身份验证的公共/私有密钥对,服务器知道公钥,只有用户知道私钥。

ssh使用RSA或DSA算法自动实现公钥身份验证协议。协议1仅限于使用RSA密钥,但协议2可以使用任何一种

包含对这两种算法的简要讨论.
文件~/.ssh/authorized_keys列出了允许登录的公钥。当用户登录时,ssh程序将告诉服务器它希望使用哪个密钥对进行身份验证。客户端证明它可以访问私钥,服务器检查相应的公钥是否被授权接受该帐户

用户通过运行ssh-keygen(1)来创建他/她的密钥对. 这将私钥存储在 ~/.ssh/identity (protocol 1), ~/.ssh/id_dsa (protocol 2 DSA), ~/.ssh/id_rsa (protocol 2 RSA) , 公钥存储在 ~/.ssh/identity.pub (protocol 1), ~/.ssh/id_dsa.pub (protocol 2 DSA), ~/.ssh/id_rsa.pub (protocol 2 RSA) 用户主目录中. T然后,用户应将公钥复制到远程计算机上他/她主目录中的 ~/.ssh/authorized_keys. 对应于~/.rhosts中文件, 每行有一个键,但行可能很长。在此之后,用户可以在不提供密码的情况下登录

使用公钥认证的最方便的方法可以是认证代理

质询-响应身份验证的工作原理如下:服务器发送任意的“质询”文本,并提示响应。协议2允许多个挑战和响应;协议1仅限于一个挑战/响应。质询-响应身份验证的例子包括BSD身份验证(参见login.conf(5))和PAM(一些非openbsd系统)。

最后,如果其他身份验证方法失败,请使用ssh提示用户输入密码。密码被发送到远程主机进行检查; 但是,由于所有通信都是加密的,因此在网络上收听的人无法看到密码。

ssh自动维护和检查包含其曾经使用过的所有主机的标识的数据库. 主机密钥
存储在用户主目录的 ~/.ssh/known_hosts 中. 此外,将自动检查文件 /etc/ssh/ssh_known_hosts 是否已知主机. 任何新主机都会自动添加到用户的文件中。如果主持人的身份发生变化,警告此并禁用密码身份验证以防止服务器欺骗或中间人攻击,否则可能会用于规避加密。该StrictHostKeyChecking选项可以用来控制登录到机器,其主机密钥是不知道或已经改变。

当服务器接受用户的身份时,服务器要么执行给定的命令,要么登录到计算机并在远程计算机上为用户提供正常的shell。与远程命令或shell的所有通信都将自动加密。

转义字符

ssh通过使用转义字符支持许多功能

转义字符必须始终跟在换行符后才能被解释为特殊。可以使用EscapeChar配置指令在配置文件中更改转义字符,也可以在命令行中使用-e选项更改转义字符

支持的转义(假设默认为’〜’)是:

 ~.      断开.

 ~^Z     背景ssh.

 ~#      列出转发的连接

 ~&      后台ssh在等待转发连接时退出/
         X11会话终止

 ~?      显示转义字符列表

 ~B      发送中断到远程系统(仅用于SSH协议有用
         版本2,如果对等方支持它)

 ~C      打开命令行。目前,这允许添加端口
         使用-L,-R和-D选项进行转发。
         也允许取消现有的远程端口转发
         -KR[bind_address:]port,  如果在ssh_config(5)中启用了PermitLocalCommand选项,
         则允许用户执行一个本地命令。
         使用-h选项可以获得基本帮助。

 ~R      请求修改连接(仅对SSH协议版本2有用)。

TCP 转发

通过安全通道转发任意TCP连接可以在命令行或配置文件中指定。TCP转发的一个可能应用是到邮件服务器的安全连接;另一个是通过防火墙

在下面的示例中,我们将研究加密IRC客户端和服务器之间的通信,即使IRC服务器不直接支持加密通信。其工作原理如下:用户
使用ssh连接到远程主机,指定用于转发与远程服务器的连接的端口。之后,可以在客户端计算机上启动要加密的服务,连接到同一本地端口,ssh将加密并转发连接。
以下示例将IRC会话从客户端计算机“127.0.0.1”(localhost)隧道传输到远程服务器“server.example.com”

     $ ssh -f -L 1234:localhost:6667 server.example.com sleep 10
     $ irc -c ’#users’ -p 1234 pinky 127.0.0.1

这个通道连接到IRC服务器“server.example.com”,使用端口1234连接到通道“#users”,昵称“pinky”,使用哪个端口并不重要,只要它大于1023(记住,只有root可以在特权端口上打开套接字),并且不与任何已经使用的端口冲突,连接被转发到远程服务器上的端口6667,因为这是IRC服务的标准端口。

指定了-f选项背景ssh和远程命令“sleep 10”,以允许一定的时间(在示例中是10秒)启动要进行隧道化的服务。如果在指定的时间内没有连接,ssh将退出。

X11 转发

如果ForwardX11变量设置为“yes”(或看到的描述- X - X,和- y选项)和用户使用X11(设置DISPLAY环境变量),连接X11显示自动转发到远程端,这样任何X11程序从shell(或命令)将经过加密的通道,和真正的X服务器的连接将从本地机器。用户不应该手动设置显示.
Forwarding of X11 connections can be configured on the command line or in configuration files.

ssh设置的显示值将指向服务器机器,但显示数大于零。这是正常的,之所以会发生这种情况,是因为ssh在服务器机器上创建了一个“代理”X服务器,用于通过加密通道转发连接

ssh还将在服务器机器上自动设置Xauthority数据。为此,它将生成一个随机的授权cookie,将其存储在服务器上的Xauthority中,并验证任何转发的连接是否携带此cookie,并在连接打开时将其替换为真正的cookie,真正的身份验证cookie永远不会发送到服务器机器。

如果ForwardAgent变量设置为“yes”(或者查看上面的-A和-a选项的描述),并且用户正在使用身份验证代理,那么到代理的连接将自动转发到远程端。

验证主机密钥

当第一次连接到服务器时,将向用户显示服务器公钥的指纹(除非禁用了StrictHostKeyChecking选项)。指纹可以使用ssh-keygen(1)来确定:

       $ ssh-keygen -l -f /etc/ssh/ssh_host_rsa_key

如果指纹已经知道,可以匹配,密钥可以接受或拒绝

要获得所有已知主机的指纹及其列表,可以使用以下命令行:

       $ ssh-keygen -lv -f ~/.ssh/known_hosts

如果指纹未知,可以使用另一种验证方法:通过DNS验证的SSH指纹。一个额外的资源记录(RR), SSHFP,被添加到一个zonefile中,连接的客户端能够匹配指纹和提供的密钥.

在本例中,我们将客户机连接到服务器“host.example.com”。
应该首先将SSHFP资源记录添加到host.example.com的zonefile中:

       $ ssh-keygen -r host.example.com.

输出行必须添加到zone文件中,检查区域是否正在回答指纹查询:

       $ dig -t SSHFP host.example.com

最后客户端连接:

       $ ssh -o "VerifyHostKeyDNS ask" host.example.com
       [...]
       Matching host key fingerprint found in DNS.
       Are you sure you want to continue connecting (yes/no)?

 有关更多信息,请参阅ssh_config(5)中的VerifyHostKeyDNS选项

基于ssh的虚拟专用网络

ssh包含使用tun(4)网络伪设备的虚拟专用网(VPN)隧道技术支持,允许安全地连接两个网络。sshd_config(5)配置选项允许隧道控制服务器是否支持此功能,以及在什么级别(第2 3层).

下面的示例将使用从10.1.1.1到10.1.1.2的点对点连接,将客户机网络10.0.50.0/24与远程网络10.0.99.0/24连接起来,前提是在网关上运行的SSH服务器(192.168.1.15)允许它连接

 客户端:

       # ssh -f -w 0:1 192.168.1.15 true
       # ifconfig tun0 10.1.1.1 10.1.1.2 netmask 255.255.255.252
       # route add 10.0.99.0/24 10.1.1.2

 服务器上:

       # ifconfig tun1 10.1.1.2 10.1.1.1 netmask 255.255.255.252
       # route add 10.0.50.0/24 10.1.1.1

可以通过/root/更好地调整客户机访问。ssh/authorized_keys文件(见下面)和permitrootserver选项。下面的条目将允许用户“jane”连接tun(4)设备1和用户“john”连接tun设备2,如果PermitRootLogin设置为“forced-commands”的话:

   tunnel="1",command="sh /etc/netstart tun1" ssh-rsa ... jane
   tunnel="2",command="sh /etc/netstart tun2" ssh-rsa ... john

由于基于ssh的设置需要相当多的开销,因此它更适合于临时设置,比如无线vpn。ipsecctl(8)和isakmpd(8)等工具可以更好地提供更持久的vpn

环境
ssh通常会设置以下环境变量:

 DISPLAY               显示变量指示X11服务器的位置。
                       通过ssh自动设置为指向的值形式“主机名:n”,在“主机名”显示shell运行的主机,
                       而“n”是一个整数≥1。ssh使用这个特殊值在安全通道上转发X11连接。
                       用户通常不应该显式地设置DISPLAY,
                       因为这会导致X11连接不安全(并且需要用户手动复制所需的授权cookie)。

 HOME                  设置用户主目录的路径

 LOGNAME               用户的同义词;设置与使用此变量的系统兼容性

 MAIL                  设置用户邮箱的路径

 PATH                 设置为默认路径,如编译ssh时指定的那样

 SSH_ASKPASS           如果ssh需要密码,如果从终端运行,它将从当前终端读取密码。
                       如果ssh没有与之关联的终端,但是设置了DISPLAY和SSH_ASKPASS,
                       那么它将执行SSH_ASKPASS指定的程序,并打开X11窗口来读取密码。
                       这在从.xsession或相关脚本调用ssh时特别有用。
                       (请注意,在某些机器上,可能需要将输入从/dev/null重定向以使其工作。)

 SSH_AUTH_SOCK         标识用于与代理通信的unix域套接字路径。

 SSH_CONNECTION        标识连接的客户端和服务器端。
                       该变量包含四个空格分隔的值:
                       客户机IP地址、客户机端口号、服务器IP地址和服务器端口号。

 SSH_ORIGINAL_COMMAND  如果执行强制命令,则此变量包含原始命令行。
                       它可以用来提取原始参数。

 SSH_TTY               被设置为与当前shell或命令相关联的tty(设备路径)的名称。
                       如果当前会话没有tty,则不设置此变量.

 TZ                    如果在守护进程启动时设置了当前时区(即守护进程将值传递给新连接),
                       则该变量将被设置为指示当前时区

 USER                  设置登录用户的名称。

 此外,ssh读取 ~/.ssh/environment, 如果文件存在且允许用户更改其环境,
 则向环境添加VARNAME=value格式的行.

FILES

 ~/.rhosts
         这个文件用于基于主机的身份验证

 ~/.shosts
         此文件的使用方式与.rhosts完全相同,
         但允许基于主机的身份验证,而不允许使用rlogin/rsh进行登录

 ~/.ssh/
         此目录是所有用户指定配置和身份验证信息的默认位置

 ~/.ssh/authorized_keys

         列出可作为此用户登录的公钥(RSA/DSA)

 ~/.ssh/config
         这是每个用户的配置文件.  
         文件格式和配置选项在ssh_config(5)中描述。
         由于潜在的滥用,这个文件必须有严格的权限:为用户读/写,其他人不能访问。
         如果所讨论的组只包含用户,则可以进行组可写

 ~/.ssh/environment
        包含环境变量的其他定义;参见上面的环境

 ~/.ssh/identity

 ~/.ssh/id_dsa
 ~/.ssh/id_rsa
        包含用于身份验证的私钥

 ~/.ssh/identity.pub
 ~/.ssh/id_dsa.pub
 ~/.ssh/id_rsa.pub

         包含用于身份验证的公钥

 ~/.ssh/known_hosts
         包含用户已登录的所有主机的主机密钥列表,
        这些主机密钥在系统范围内的已知主机密钥列表中尚未包含

 ~/.ssh/rc
         这个文件中的命令在用户登录时由ssh执行,
         就在用户的shell(或命令)启动之前

 /etc/hosts.equiv
         此文件用于基于主机的身份验证(见上面)。它只能由root用户写入

 /etc/ssh/shosts.equiv
         此文件的使用方式与主机完全相同。
         但是允许基于主机的身份验证,而不允许使用rlogin/rsh进行登录

 /etc/ssh/ssh_config

         系统配置文件.  文件格式和配置选项在ssh_config(5)中描述。

 /etc/ssh/ssh_host_key
 /etc/ssh/ssh_host_dsa_key
 /etc/ssh/ssh_host_rsa_key
         这三个文件包含主机密钥的私有部分,用于基于主机的身份验证。
         如果使用的是协议版本1,那么ssh必须是setuid根,因为主机密钥只有root才可读。
         对于协议版本2,ssh使用ssh-keysign(8)访问主机密钥,
         消除了使用基于主机的身份验证时ssh必须是setuid根的要求。
         默认情况下,ssh不是setuid根

 /etc/ssh/ssh_known_hosts

         系统范围内的已知主机密钥列表。
         这个文件应该由系统管理员准备,以包含组织中所有机器的公共主机密钥。它应该是所有人可读的

 /etc/ssh/sshrc
         这个文件中的命令在用户登录时由ssh执行,就在用户的shell(或命令)启动之前

ssh是OpenSSH套件的一部分

ssh 命令实例:

linux命令:ssh-copy-id -i your-ed25519-key user@host user@host your-ed25519-key -i ssh-copy-id ssh-copy-id -i your-ed25519-key user@hostrootopen.com
linux命令:ssh-copy-id -i your-ed25519-key user@host user@host your-ed25519-key -i ssh-copy-id ssh-copy-id -i your-ed25519-key user@hostrootopen.com
2019-06-04 22:27:39

linux命令:ssh root@vps.example -p22 "cat /dev/sda1 | gzip -1 - " > vps.sda1.img.gz vps.sda1.img.gz > " - -1 gzip | /dev/sda1 "cat -p22 root@vps.example ssh ssh root@vps.example -p22 "cat /dev/sda1 | gzip -1 - " > vps.sda1.img.gz rootopen.com
linux命令:ssh root@vps.example -p22 "cat /dev/sda1 | gzip -1 - " > vps.sda1.img.gz vps.sda1.img.gz > " - -1 gzip | /dev/sda1 "cat -p22 root@vps.example ssh ssh root@vps.example -p22 "cat /dev/sda1 | gzip -1 - " > vps.sda1.img.gz rootopen.com
2019-06-03 22:52:02

linux命令:ssh-keygen -y -f privatekey.pem > publickey.pem publickey.pem > privatekey.pem -f -y ssh-keygen ssh-keygen -y -f privatekey.pem > publickey.pemrootopen.com
linux命令:ssh-keygen -y -f privatekey.pem > publickey.pem publickey.pem > privatekey.pem -f -y ssh-keygen ssh-keygen -y -f privatekey.pem > publickey.pemrootopen.com
2019-02-12 20:58:46

linux命令:ssh -X servername servername -X ssh ssh -X servernamerootopen.com
linux命令:ssh -X servername servername -X ssh ssh -X servernamerootopen.com
2018-12-13 23:13:04

linux命令:ssh -L 1080:127.0.0.1:1080 -i "11111.pem" ec2-user@ec2-13-230-30-2d7.ap-northeast-1.compute.amazonaws.com ec2-user@ec2-13-230-30-2d7.ap-northeast-1.compute.amazonaws.com "11111.pem" -i 1080:127.0.0.1:1080 -L ssh ssh -L 1080:127.0.0.1:1080 -i "11111.pem" ec2-user@ec2-13-230-30-2d7.ap-northeast-1.compute.amazonaws.comrootopen.com
linux命令:ssh -L 1080:127.0.0.1:1080 -i "11111.pem" ec2-user@ec2-13-230-30-2d7.ap-northeast-1.compute.amazonaws.com ec2-user@ec2-13-230-30-2d7.ap-northeast-1.compute.amazonaws.com "11111.pem" -i 1080:127.0.0.1:1080 -L ssh ssh -L 1080:127.0.0.1:1080 -i "11111.pem" ec2-user@ec2-13-230-30-2d7.ap-northeast-1.compute.amazonaws.comrootopen.com
2018-12-10 14:55:16

linux命令:ssh -p 28511 root@172.93.47.106 root@172.93.47.106 28511 -p ssh ssh -p 28511 root@172.93.47.106rootopen.com
linux命令:ssh -p 28511 root@172.93.47.106 root@172.93.47.106 28511 -p ssh ssh -p 28511 root@172.93.47.106rootopen.com
2018-11-17 12:51:30

linux命令:ssh tecmint@192.168.56.10 tecmint@192.168.56.10 ssh ssh tecmint@192.168.56.10rootopen.com
linux命令:ssh tecmint@192.168.56.10 tecmint@192.168.56.10 ssh ssh tecmint@192.168.56.10rootopen.com
2018-09-11 09:55:30

linux命令:ssh user@host "ps aux | grep httpd | wc -l" -l" wc | httpd grep | aux "ps user@host ssh ssh user@host "ps aux | grep httpd | wc -l"rootopen.com
linux命令:ssh user@host "ps aux | grep httpd | wc -l" -l" wc | httpd grep | aux "ps user@host ssh ssh user@host "ps aux | grep httpd | wc -l"rootopen.com
2018-05-31 23:01:48

linux命令:ssh user@host cat /path/to/remotefile | diff /path/to/localfile - - /path/to/localfile diff | /path/to/remotefile cat user@host ssh ssh user@host cat /path/to/remotefile | diff /path/to/localfile -rootopen.com
linux命令:ssh user@host cat /path/to/remotefile | diff /path/to/localfile - - /path/to/localfile diff | /path/to/remotefile cat user@host ssh ssh user@host cat /path/to/remotefile | diff /path/to/localfile -rootopen.com
2018-02-10 20:46:48

linux命令:ssh somemachine "cd some dir; tar zcpf - somedirname" |tar zxpf - - zxpf |tar somedirname" - zcpf tar dir; some "cd somemachine ssh ssh somemachine "cd some dir; tar zcpf - somedirname" |tar zxpf -rootopen.com
linux命令:ssh somemachine "cd some dir; tar zcpf - somedirname" |tar zxpf - - zxpf |tar somedirname" - zcpf tar dir; some "cd somemachine ssh ssh somemachine "cd some dir; tar zcpf - somedirname" |tar zxpf -rootopen.com
2018-01-13 10:45:48

linux命令:ssh-keygen -R \[localhost\]:8022 \[localhost\]:8022 -R ssh-keygen ssh-keygen -R \[localhost\]:8022rootopen.com
linux命令:ssh-keygen -R \[localhost\]:8022 \[localhost\]:8022 -R ssh-keygen ssh-keygen -R \[localhost\]:8022rootopen.com
2018-02-20 19:24:48

linux命令:ssh-keygen -i -f $sshkeysfile >> authorized_keys authorized_keys >> $sshkeysfile -f -i ssh-keygen ssh-keygen -i -f $sshkeysfile >> authorized_keysrootopen.com
linux命令:ssh-keygen -i -f $sshkeysfile >> authorized_keys authorized_keys >> $sshkeysfile -f -i ssh-keygen ssh-keygen -i -f $sshkeysfile >> authorized_keysrootopen.com
2018-02-26 23:19:48

linux命令:ssh-keygen -l -f [pubkey] | awk '{print $2}' | tr -ds ':' '' | egrep -ie "[a-f0-9]{32}" "[a-f0-9]{32}" -ie egrep | '' ':' -ds tr | $2}' '{print awk | [pubkey] -f -l ssh-keygen ssh-keygen -l -f [pubkey] | awk '{print $2}' | tr -ds ':' '' | egrep -ie "[a-f0-9]{32}"rootopen.com
linux命令:ssh-keygen -l -f [pubkey] | awk '{print $2}' | tr -ds ':' '' | egrep -ie "[a-f0-9]{32}" "[a-f0-9]{32}" -ie egrep | '' ':' -ds tr | $2}' '{print awk | [pubkey] -f -l ssh-keygen ssh-keygen -l -f [pubkey] | awk '{print $2}' | tr -ds ':' '' | egrep -ie "[a-f0-9]{32}"rootopen.com
2018-03-09 12:20:48

linux命令:sshfs name@server:/path/to/folder /path/to/mount/point /path/to/mount/point name@server:/path/to/folder sshfs sshfs name@server:/path/to/folder /path/to/mount/pointrootopen.com
linux命令:sshfs name@server:/path/to/folder /path/to/mount/point /path/to/mount/point name@server:/path/to/folder sshfs sshfs name@server:/path/to/folder /path/to/mount/pointrootopen.com
2018-06-05 09:30:48

linux命令:ssh -N -L2001:localhost:80 -o "ProxyCommand ssh someuser@hubmachine nc -w 5 %h %p" someuser@destinationmachine someuser@destinationmachine %p" %h 5 -w nc someuser@hubmachine ssh "ProxyCommand -o -L2001:localhost:80 -N ssh ssh -N -L2001:localhost:80 -o "ProxyCommand ssh someuser@hubmachine nc -w 5 %h %p" someuser@destinationmachinerootopen.com
linux命令:ssh -N -L2001:localhost:80 -o "ProxyCommand ssh someuser@hubmachine nc -w 5 %h %p" someuser@destinationmachine someuser@destinationmachine %p" %h 5 -w nc someuser@hubmachine ssh "ProxyCommand -o -L2001:localhost:80 -N ssh ssh -N -L2001:localhost:80 -o "ProxyCommand ssh someuser@hubmachine nc -w 5 %h %p" someuser@destinationmachinerootopen.com
2018-05-02 01:14:48

linux命令:ssh -L 5900:localhost:5900 user@exampleserver.com user@exampleserver.com 5900:localhost:5900 -L ssh ssh -L 5900:localhost:5900 user@exampleserver.comrootopen.com
linux命令:ssh -L 5900:localhost:5900 user@exampleserver.com user@exampleserver.com 5900:localhost:5900 -L ssh ssh -L 5900:localhost:5900 user@exampleserver.comrootopen.com
2018-01-13 05:28:48

linux命令:ssh-copy-id username@hostname username@hostname ssh-copy-id ssh-copy-id username@hostnamerootopen.com
linux命令:ssh-copy-id username@hostname username@hostname ssh-copy-id ssh-copy-id username@hostnamerootopen.com
2017-12-27 06:21:48

linux命令:ssh -D 8888 user@site.com user@site.com 8888 -D ssh ssh -D 8888 user@site.comrootopen.com
linux命令:ssh -D 8888 user@site.com user@site.com 8888 -D ssh ssh -D 8888 user@site.comrootopen.com
2018-02-05 04:21:48

linux命令:ssh -CNL 3306:localhost:3306 user@site.com user@site.com 3306:localhost:3306 -CNL ssh ssh -CNL 3306:localhost:3306 user@site.comrootopen.com
linux命令:ssh -CNL 3306:localhost:3306 user@site.com user@site.com 3306:localhost:3306 -CNL ssh ssh -CNL 3306:localhost:3306 user@site.comrootopen.com
2018-01-13 01:39:48

linux命令:ssh user@host cat /path/to/some/file | xclip xclip | /path/to/some/file cat user@host ssh ssh user@host cat /path/to/some/file | xcliprootopen.com
linux命令:ssh user@host cat /path/to/some/file | xclip xclip | /path/to/some/file cat user@host ssh ssh user@host cat /path/to/some/file | xcliprootopen.com
2018-04-12 19:05:48

linux命令:ssh user@host 'mysqldump dbname | gzip' > /path/to/backups/db-backup-`date +%Y-%m-%d`.sql.gz +%Y-%m-%d`.sql.gz /path/to/backups/db-backup-`date > gzip' | dbname 'mysqldump user@host ssh ssh user@host 'mysqldump dbname | gzip' > /path/to/backups/db-backup-`date +%Y-%m-%d`.sql.gzrootopen.com
linux命令:ssh user@host 'mysqldump dbname | gzip' > /path/to/backups/db-backup-`date +%Y-%m-%d`.sql.gz +%Y-%m-%d`.sql.gz /path/to/backups/db-backup-`date > gzip' | dbname 'mysqldump user@host ssh ssh user@host 'mysqldump dbname | gzip' > /path/to/backups/db-backup-`date +%Y-%m-%d`.sql.gzrootopen.com
2018-05-15 21:22:48

linux命令:ssh -t user@some.domain.com /usr/bin/screen -xRR -xRR /usr/bin/screen user@some.domain.com -t ssh ssh -t user@some.domain.com /usr/bin/screen -xRRrootopen.com
linux命令:ssh -t user@some.domain.com /usr/bin/screen -xRR -xRR /usr/bin/screen user@some.domain.com -t ssh ssh -t user@some.domain.com /usr/bin/screen -xRRrootopen.com
2018-05-27 18:49:48

linux命令:ssh -A user@somehost user@somehost -A ssh ssh -A user@somehostrootopen.com
linux命令:ssh -A user@somehost user@somehost -A ssh ssh -A user@somehostrootopen.com
2018-05-29 15:50:48

linux命令:ssh -MNf <user>@<host> <user>@<host> -MNf ssh ssh -MNf <user>@<host>rootopen.com
linux命令:ssh -MNf <user>@<host> <user>@<host> -MNf ssh ssh -MNf <user>@<host>rootopen.com
2018-02-06 23:52:48

linux命令:ssh -T user@host /bin/bash -i -i /bin/bash user@host -T ssh ssh -T user@host /bin/bash -irootopen.com
linux命令:ssh -T user@host /bin/bash -i -i /bin/bash user@host -T ssh ssh -T user@host /bin/bash -irootopen.com
2018-06-08 18:58:48

linux命令:ssh -t reachable_host ssh unreachable_host unreachable_host ssh reachable_host -t ssh ssh -t reachable_host ssh unreachable_hostrootopen.com
linux命令:ssh -t reachable_host ssh unreachable_host unreachable_host ssh reachable_host -t ssh ssh -t reachable_host ssh unreachable_hostrootopen.com
2018-02-06 13:54:48

linux命令:ssh -fX <user>@<host> <program> <program> <user>@<host> -fX ssh ssh -fX <user>@<host> <program>rootopen.com
linux命令:ssh -fX <user>@<host> <program> <program> <user>@<host> -fX ssh ssh -fX <user>@<host> <program>rootopen.com
2018-04-19 22:40:48

linux命令:ssh -NL 2000:remotehost:22 remotehost remotehost 2000:remotehost:22 -NL ssh ssh -NL 2000:remotehost:22 remotehostrootopen.com
linux命令:ssh -NL 2000:remotehost:22 remotehost remotehost 2000:remotehost:22 -NL ssh ssh -NL 2000:remotehost:22 remotehostrootopen.com
2018-05-30 02:55:48

linux命令:ssh user@host "cd targetdir; tar cfp - *" | dd of=file.tar of=file.tar dd | *" - cfp tar targetdir; "cd user@host ssh ssh user@host "cd targetdir; tar cfp - *" | dd of=file.tarrootopen.com
linux命令:ssh user@host "cd targetdir; tar cfp - *" | dd of=file.tar of=file.tar dd | *" - cfp tar targetdir; "cd user@host ssh ssh user@host "cd targetdir; tar cfp - *" | dd of=file.tarrootopen.com
2018-04-12 02:07:48

linux命令:ssh-keygen; ssh-copy-id user@host; ssh user@host user@host ssh user@host; ssh-copy-id ssh-keygen; ssh-keygen; ssh-copy-id user@host; ssh user@hostrootopen.com
linux命令:ssh-keygen; ssh-copy-id user@host; ssh user@host user@host ssh user@host; ssh-copy-id ssh-keygen; ssh-keygen; ssh-copy-id user@host; ssh user@hostrootopen.com
2018-04-26 03:37:48

linux命令:ssh user@host "(cd /path/to/remote/top/dir ; tar cvf - ./*)" | tar xvf - - xvf tar | ./*)" - cvf tar ; /path/to/remote/top/dir "(cd user@host ssh ssh user@host "(cd /path/to/remote/top/dir ; tar cvf - ./*)" | tar xvf -rootopen.com
linux命令:ssh user@host "(cd /path/to/remote/top/dir ; tar cvf - ./*)" | tar xvf - - xvf tar | ./*)" - cvf tar ; /path/to/remote/top/dir "(cd user@host ssh ssh user@host "(cd /path/to/remote/top/dir ; tar cvf - ./*)" | tar xvf -rootopen.com
2018-04-04 16:25:48

linux命令:ssh -vN hostname 2>&1 | grep "remote software version" version" software "remote grep | 2>&1 hostname -vN ssh ssh -vN hostname 2>&1 | grep "remote software version"rootopen.com
linux命令:ssh -vN hostname 2>&1 | grep "remote software version" version" software "remote grep | 2>&1 hostname -vN ssh ssh -vN hostname 2>&1 | grep "remote software version"rootopen.com
2018-05-24 22:32:48

linux命令:ssh user@server | tee logfilename logfilename tee | user@server ssh ssh user@server | tee logfilenamerootopen.com
linux命令:ssh user@server | tee logfilename logfilename tee | user@server ssh ssh user@server | tee logfilenamerootopen.com
2018-02-02 20:51:48

linux命令:ssh -i $PRIVATEKEY $HOST -C 'cd $SOURCE; tar -cz --numeric-owner .' | tee $DESTINATION/backup.tgz | tar -tz -tz tar | $DESTINATION/backup.tgz tee | .' --numeric-owner -cz tar $SOURCE; 'cd -C $HOST $PRIVATEKEY -i ssh ssh -i $PRIVATEKEY $HOST -C 'cd $SOURCE; tar -cz --numeric-owner .' | tee $DESTINATION/backup.tgz | tar -tzrootopen.com
linux命令:ssh -i $PRIVATEKEY $HOST -C 'cd $SOURCE; tar -cz --numeric-owner .' | tee $DESTINATION/backup.tgz | tar -tz -tz tar | $DESTINATION/backup.tgz tee | .' --numeric-owner -cz tar $SOURCE; 'cd -C $HOST $PRIVATEKEY -i ssh ssh -i $PRIVATEKEY $HOST -C 'cd $SOURCE; tar -cz --numeric-owner .' | tee $DESTINATION/backup.tgz | tar -tzrootopen.com
2018-05-02 14:13:48

linux命令:ssh -C -X user@remotehost gui_command gui_command user@remotehost -X -C ssh ssh -C -X user@remotehost gui_commandrootopen.com
linux命令:ssh -C -X user@remotehost gui_command gui_command user@remotehost -X -C ssh ssh -C -X user@remotehost gui_commandrootopen.com
2018-03-03 16:43:48

linux命令:ssh $HOST -l$USER cat /REMOTE/FILE | sdiff /LOCAL/FILE - - /LOCAL/FILE sdiff | /REMOTE/FILE cat -l$USER $HOST ssh ssh $HOST -l$USER cat /REMOTE/FILE | sdiff /LOCAL/FILE -rootopen.com
linux命令:ssh $HOST -l$USER cat /REMOTE/FILE | sdiff /LOCAL/FILE - - /LOCAL/FILE sdiff | /REMOTE/FILE cat -l$USER $HOST ssh ssh $HOST -l$USER cat /REMOTE/FILE | sdiff /LOCAL/FILE -rootopen.com
2018-01-18 14:30:48

linux命令:ssh -f -N -L 5432:talk.google.com:5222 user@home.network.com user@home.network.com 5432:talk.google.com:5222 -L -N -f ssh ssh -f -N -L 5432:talk.google.com:5222 user@home.network.comrootopen.com
linux命令:ssh -f -N -L 5432:talk.google.com:5222 user@home.network.com user@home.network.com 5432:talk.google.com:5222 -L -N -f ssh ssh -f -N -L 5432:talk.google.com:5222 user@home.network.comrootopen.com
2018-04-01 00:34:48

linux命令:ssh -L :: -L :: @ @ :: -L :: -L ssh ssh -L :: -L :: @rootopen.com
linux命令:ssh -L :: -L :: @ @ :: -L :: -L ssh ssh -L :: -L :: @rootopen.com
2018-04-11 10:52:48

linux命令:ssh root@server 'tail --max-unchanged-stats=10 -n0 -F /var/log/auth.log ' | grep Accepted | while read l ; do kdialog --title "SSH monitor" --passivepopup "$l" 3; done done 3; "$l" --passivepopup monitor" "SSH --title kdialog do ; l read while | Accepted grep | ' /var/log/auth.log -F -n0 --max-unchanged-stats=10 'tail root@server ssh ssh root@server 'tail --max-unchanged-stats=10 -n0 -F /var/log/auth.log ' | grep Accepted | while read l ; do kdialog --title "SSH monitor" --passivepopup "$l" 3; donerootopen.com
linux命令:ssh root@server 'tail --max-unchanged-stats=10 -n0 -F /var/log/auth.log ' | grep Accepted | while read l ; do kdialog --title "SSH monitor" --passivepopup "$l" 3; done done 3; "$l" --passivepopup monitor" "SSH --title kdialog do ; l read while | Accepted grep | ' /var/log/auth.log -F -n0 --max-unchanged-stats=10 'tail root@server ssh ssh root@server 'tail --max-unchanged-stats=10 -n0 -F /var/log/auth.log ' | grep Accepted | while read l ; do kdialog --title "SSH monitor" --passivepopup "$l" 3; donerootopen.com
2018-02-14 10:51:48

linux命令:ssh-keygen -R hostname hostname -R ssh-keygen ssh-keygen -R hostnamerootopen.com
linux命令:ssh-keygen -R hostname hostname -R ssh-keygen ssh-keygen -R hostnamerootopen.com
2018-03-29 02:13:48

linux命令:ssh -t remote_host screen -r -r screen remote_host -t ssh ssh -t remote_host screen -rrootopen.com
linux命令:ssh -t remote_host screen -r -r screen remote_host -t ssh ssh -t remote_host screen -rrootopen.com
2017-12-30 07:34:48

linux命令:ssh -t user@host screen -x <screen name> name> <screen -x screen user@host -t ssh ssh -t user@host screen -x <screen name>rootopen.com
linux命令:ssh -t user@host screen -x <screen name> name> <screen -x screen user@host -t ssh ssh -t user@host screen -x <screen name>rootopen.com
2018-01-13 13:16:48

linux命令:ssh-copy-id user@host user@host ssh-copy-id ssh-copy-id user@hostrootopen.com
linux命令:ssh-copy-id user@host user@host ssh-copy-id ssh-copy-id user@hostrootopen.com
2018-01-12 15:25:48

linux命令:ssh root@pyramid \ "tcpdump -nn -i eth1 -w -" | snort -c /etc/snort/snort.conf -r - - -r /etc/snort/snort.conf -c snort | -" -w eth1 -i -nn "tcpdump \ root@pyramid ssh ssh root@pyramid \ "tcpdump -nn -i eth1 -w -" | snort -c /etc/snort/snort.conf -r -rootopen.com
linux命令:ssh root@pyramid \ "tcpdump -nn -i eth1 -w -" | snort -c /etc/snort/snort.conf -r - - -r /etc/snort/snort.conf -c snort | -" -w eth1 -i -nn "tcpdump \ root@pyramid ssh ssh root@pyramid \ "tcpdump -nn -i eth1 -w -" | snort -c /etc/snort/snort.conf -r -rootopen.com
2018-04-10 16:13:48

linux命令:ssh middlehost "ssh -a root@securehost '> nicescript'" < nicescript nicescript < nicescript'" '> root@securehost -a "ssh middlehost ssh ssh middlehost "ssh -a root@securehost '> nicescript'" < nicescriptrootopen.com
linux命令:ssh middlehost "ssh -a root@securehost '> nicescript'" < nicescript nicescript < nicescript'" '> root@securehost -a "ssh middlehost ssh ssh middlehost "ssh -a root@securehost '> nicescript'" < nicescriptrootopen.com
2018-02-25 12:17:48

linux命令:ssh -t hostA ssh hostB hostB ssh hostA -t ssh ssh -t hostA ssh hostBrootopen.com
linux命令:ssh -t hostA ssh hostB hostB ssh hostA -t ssh ssh -t hostA ssh hostBrootopen.com
2018-04-18 08:46:48

linux命令:ssh user@remotehost [anycommand](i.e uptime,w) uptime,w) [anycommand](i.e user@remotehost ssh ssh user@remotehost [anycommand](i.e uptime,w)rootopen.com
linux命令:ssh user@remotehost [anycommand](i.e uptime,w) uptime,w) [anycommand](i.e user@remotehost ssh ssh user@remotehost [anycommand](i.e uptime,w)rootopen.com
2018-05-17 19:10:48

linux命令:ssh -f -L3307:127.0.0.1:3306 -N -t -x user@host sleep 600 ; mk-table-sync --execute --verbose u=root,p=xxx,h=127.0.0.1,P=3307 u=root,p=xxx,h=localhost u=root,p=xxx,h=localhost u=root,p=xxx,h=127.0.0.1,P=3307 --verbose --execute mk-table-sync ; 600 sleep user@host -x -t -N -L3307:127.0.0.1:3306 -f ssh ssh -f -L3307:127.0.0.1:3306 -N -t -x user@host sleep 600 ; mk-table-sync --execute --verbose u=root,p=xxx,h=127.0.0.1,P=3307 u=root,p=xxx,h=localhostrootopen.com
linux命令:ssh -f -L3307:127.0.0.1:3306 -N -t -x user@host sleep 600 ; mk-table-sync --execute --verbose u=root,p=xxx,h=127.0.0.1,P=3307 u=root,p=xxx,h=localhost u=root,p=xxx,h=localhost u=root,p=xxx,h=127.0.0.1,P=3307 --verbose --execute mk-table-sync ; 600 sleep user@host -x -t -N -L3307:127.0.0.1:3306 -f ssh ssh -f -L3307:127.0.0.1:3306 -N -t -x user@host sleep 600 ; mk-table-sync --execute --verbose u=root,p=xxx,h=127.0.0.1,P=3307 u=root,p=xxx,h=localhostrootopen.com
2018-03-01 02:13:48

linux命令:ssh user@machine_A dd if=/dev/dvd0 > dvddump.iso dvddump.iso > if=/dev/dvd0 dd user@machine_A ssh ssh user@machine_A dd if=/dev/dvd0 > dvddump.isorootopen.com
linux命令:ssh user@machine_A dd if=/dev/dvd0 > dvddump.iso dvddump.iso > if=/dev/dvd0 dd user@machine_A ssh ssh user@machine_A dd if=/dev/dvd0 > dvddump.isorootopen.com
2018-02-24 14:24:48

linux命令:ssh -f user@remote.ip DISPLAY=:0.0 smplayer movie.avi movie.avi smplayer DISPLAY=:0.0 user@remote.ip -f ssh ssh -f user@remote.ip DISPLAY=:0.0 smplayer movie.avirootopen.com
linux命令:ssh -f user@remote.ip DISPLAY=:0.0 smplayer movie.avi movie.avi smplayer DISPLAY=:0.0 user@remote.ip -f ssh ssh -f user@remote.ip DISPLAY=:0.0 smplayer movie.avirootopen.com
2018-01-12 09:02:48

Linux的Bash命令行(A-Z排序)