需求场景
最近几天需要实现软件的远程监控,但是实际场景又不能使用向日葵、VNC、AnyDesk、以及其他的监视软件,并且软件的整体设计也没有这块的数据上行设计。
但是事情还是要做的,想到Linux下不是有X service 的服务么,那我直接ssh服务来远程启动程序并且把可视化界面展示到本地就可以了么,感谢Linux的社区开发人员。
SSH服务介绍
首先需要了解我们要使用的工具 ssh服务详解:
SSH(1) BSD General Commands Manual SSH(1) NAME ssh ? OpenSSH SSH 客户端 (远程登录程序) 总 ssh [-l login_name] hostname | user@hostname [command] ssh [-afgknqstvxACNTX1246] [-b bind_address] [-c cipher_spec] [-e escape_char] [-i identity_file] [-l login_name] [-m mac_spec] [-o option] [-p port] [-F configfile] [-L port:host:hostport] [-R port:host:hostport] [-D port] hostname | user@hostname [command] 描 ssh (SSH 客户端) 用于登录远程主机, 并且在远程主机上执行命令. 它的目的是替换 rlogin 和 rsh, 同时在不安全的网络之上, 两个互不 信任的主机之间, 提供加密的, 安全的通信连接. X11 连接和任意 TCP/IP 端口均可以通过此安全通道转发(forward). 当用户通过 ssh 连接并登录主机 hostname 后, 根据所用的协议版本, 用户必须通过下述方法之一向远程主机证明他/她的身份: SSH 协 第一, 如果发出登录命令的本地主机已经列在远程主机的 /etc/hosts.equiv 或 /etc/ssh/shosts.equiv 文件中, 并且两端的用户名相同, 则立即允许该用户登录. 第二, 如果远程主机的用户根目录 (home 目录) 下存在 .rhosts 或 .shosts, 并且其中有一行包含了客户机的名字和客户机上的用户名, 则允许该用户登录. 一般来说, 服务器不允许单独使用这种认证方式, 因为它不安全. 第二种认证方法是 rhosts 或 hosts.equiv 文件结合基于 RSA 的主机认证. 这意味着如果 $HOME/.rhosts, $HOME/.shosts, /etc/hosts.equiv, 或 /etc/ssh/shosts.equiv 允许登录, 并且如果服务器能够验证客户的主机密钥(host key) (参见 文件(FILE) 节的 /etc/ssh/ssh_known_hosts 和 $HOME/.ssh/known_hosts ), 主机才允许客户登录. 这个认证方法关闭了因 IP 欺骗, DNS 欺骗和路由欺骗造成的安全漏洞. [系统管理员注意: 一般说来 /etc/hosts.equiv, $HOME/.rhosts, 和 rlogin/rsh 协议的本质是不可靠地, 要安全就应该关掉它们.] 作为第三种认证方式, ssh 支持基于 RSA 的认证. 这种方案依托于公开密钥算法: 密码系统的加密和解密通过不同的密钥完成, 无法 通过加密密钥推导出解密密钥. RSA 就是这种密码系统. 每个用户创建一对公开/私密钥匙用于认证. 服务器知道用户的公钥, 只有用户知道他自己的私钥. $HOME/.ssh/authorized_keys 文件列出允许登录的(用户的)公钥. 当用户开始登录, ssh 程序告诉服务器它准备使用哪对钥匙(公钥)做认证. 服务器检查这只密钥(公钥)是否获得许可, 如果许可, 服务器向用户 (实际上是用户面前运行的 ssh 程序) 发出测试, 用用户的公钥加密一个随机数. 这个随机数只能用正确的私钥解密. 随后用户的客户程序用私钥解出测试数字, 即可证明他/她掌握私钥, 而又无需(把私钥)暴露给服务器. ssh 能够自动执行 RSA 认证协议. 用户通过运行 ssh-keygen(1) 创建他/她的 RSA 密钥对. 私钥存放在用户根目录下的 $HOME/.ssh/identity 中, 而公钥存放在 $HOME/.ssh/identity.pub 中. 随后, 用户应该把 identity.pub 复制到远程服务器中, 作为 $HOME/.ssh/authorized_keys 存放到他/她的用户根目录下 ( authorized_keys 对应传统的 $HOME/.rhosts 文件, 每一行只有一只密钥, 尽管一行可以很长). 用户无须密码就可以直接登录. RSA 认证远比 rhosts 认证安全. RAS 认证最便捷的用法大概就是使用认证代理(authentication agent) 了. 详见 ssh-agent(1) 手册页. 如果这些认证方式都失败了, ssh 就提示用户输入口令(password), 然后把口令送到服务器做验证. 由于整个通信过程是 加密的, 因此别人不可能通过侦听网络获得这个口令. SSH 协 当用户以协议第二版连接时, 类似的认证方法一样有效. 如果使用了 PreferredAuthentications 的默认内容, 客户端首先试着用基于主机的认证方法进行连接; 如果这个方法失败了 就用公开密钥方法作认证; 最后, 如果它也失败了, 就进入键盘操作, 试试 用户口令认证. 这个公开密钥方法类似于上一节描述的 RAS 认证, 并且允许使用 RAS 或 DSA 算法: 客户端用他的私钥 ( $HOME/.ssh/id_dsa 或 $HOME/.ssh/id_rsa ) 对会话标识符(session identifier)签名, 然后把结果送到服务器. 服务器检查 $HOME/.ssh/authorized_keys 中是否有匹配的公钥, 如果密钥和签名都正确, 访问就可以继续进行. 会话标识符来自共享的 Diffie-Hellman 值, 只有客户端和服务器端才知道这个值. 如果公钥认证失败或无效, 用户口令将会加密后送到远端主机来证明用户的身份. 另外, ssh 支持基于主机或测试应答的认证方式. 协议第二版提供附加机制增强保密性 (数据流用 3DES, Blowfish, CAST128 或 Arcfour 加密) 和完整性 (hmac-md5, hmac-sha1). 注意, 协议第一版缺少强有力的机制确保连接的完整性. 登 服务器接受用户身份后, 服务器即可以执行给定的命令, 也可以让用户登录并给他 一个正常的 shell. 所有和远端命令或 shell 的通信被自动加密. 如果分配了伪终端(pseudo-terminal)(普通的登录会话), 用户可以使用后面将 提到的 escape 字符. 如果没有分配伪终端, 则会话是透明的(transparent), 能够可靠的传送二进制数据. 大多数系统上, 即使分配了终端, 把 escape 字符设为 “none” 也可以让会话透明. 当远程主机上的命令或 shell 退出时, 会话即结束, 并关闭所有 X11 和 TCP/IP 连接. 远端程序的返回码做为 ssh 的返回码返回. Escape 字 如果启用了伪终端, ssh 能够通过 escape 字符支持一组功能. 单独的波浪符可以用 ~~ 送出去, 只要后面不跟下面列举的字符, 也可以把它直接送出去. escape 字符必须接在换行(newline)后面, 这样才具有特别含义. 在配置文件中可以用 EscapeChar 命令更改 escape 字符, 在命令行上可以用 -e 选项更改. 已支持的 escape 命令 (假设是默认的 ‘~’) 有: ~. 断开连接 ~^Z 把 ssh 送到后台 ~# 列出转发的连接 (forwarded connection) ~& 当等待转发的连接/X11会话结束时, ssh 在后台退出登录 ~? 显示 escape 字符的列表 ~C 打开命令行 (仅用于 -L 和 -R 选项增加端口转发) ~R 请求连接的重建(rekeying) (仅用于SSH协议第二版, 且对方支持) X11 和 如果 ForwardX11 变量设为 “yes” (或参见后面对 -X 和 -x 选项的描述), 并且用户正在使用 X11 (设置了 DISPLAY 环境变量), 和 X11 显示器的连接将自动以这种形式转发到远端: 任何用 shell 或命令启动的 X11 程序将穿过加密的通道, 从本地机器连接真正的 X 服务器. 用户不应该手动设置 DISPLAY. 可以在命令行上, 也可以在配置文件中设置 X11 连接的转发. ssh 设置的 DISPLAY 值将指向服务器, 但是显示器号大于零. 这很自然, 因为 ssh 在服务器上创建了一个 “proxy” X 服务器, 把连接通过加密通道转发出去. ssh 将自动在服务器上设置 Xauthority 数据. 目的是这样的: SSH 生成一个随机的授权 cookie, 存放在服务器的 Xauthority 中. SSH 检查并确保转发的连接携带了这个 cookie, 打开连接后, 把它替换为真正的 cookie. 真正的认证 cookie 绝不会送往服务器 (也不会有任何明文传送的 cookie). 如果 ForwardAgent 变量设为 “yes” (或参见后面对 -A 和 -a 选项的描述), 并且用户正在使用认证代理(authentication agent), 则和代理的连接将自动转发到远程主机. 既可以在命令行上, 也可以在配置文件中指定通过加密通道转发的任何 TCP/IP 连接. TCP/IP 转向的应用有, 比如说, 和电子钱包的安全连接, 或者是穿过防火墙等. 服 ssh 自动维护并检查一个身份数据库, 它包含所有(成功)来访的主机的身份数据. 主机密钥存放在用户根目录下的 $HOME/.ssh/known_hosts 文件中. 另外, SSH 自动检查 /etc/ssh/ssh_known_hosts 里面已知的主机. 任何新主机将被自动添加到用户文件中. 如果某个主机的身份发生改变, ssh 就会发出警告, 并且关闭对它的密码认证, 以防止特洛伊木马窃取用户密码. 这个机制的另一个目的是防止中间人攻击, 否则这种攻击可能会绕过加密系统. StrictHostKeyChecking 选项用来防止登录到主机密钥不能识别或发生改变的那些机器. 命令行选项有: -a 禁止转发认证代理的连接. -A 允许转发认证代理的连接. 可以在配置文件中对每个主机单独设定这个参数. 代理转发须谨慎. 某些用户能够在远程主机上绕过文件访问权限 (由于代理的 UNIX 域 socket), 他们可以通过转发的连接访问本地代理. 攻击者不可能从代理获得密钥内容, 但是他们能够操作这些密钥, 利用加载到代理上 的身份信息通过认证. -b bind_address 在拥有多个接口或地址别名的机器上, 指定收发接口. -c blowfish|3des|des 选择加密会话的密码术. 3des 是默认算法. 3des (triple-des) 用三支不同的密钥做加密-解密-加密三次运算, 被认为比较可靠. blowfish 是一种快速的分组加密术(block cipher), 非常安全, 而且速度比 3des 快的多. des 仅支持 ssh 客户端, 目的是能够和老式的不支持 3des 的协议第一版互操作. 由于其密码算法上的弱点, 强烈建议避免使用. -c cipher_spec 另外, 对于协议第二版, 这里可以指定一组用逗号隔开, 按优先顺序排列的密码术. 详见 Ciphers. -e ch|^ch|none 设置 pty 会话的 escape 字符 (默认字符: ‘~’). escape 字符只在行首有效, escape 字符后面跟一个点 (‘.’) 表示结束连接, 跟一个 control-Z 表示挂起连接(suspend), 跟 escape 字符自己 表示输出这个字符. 把这个字符设为 “none” 则禁止 escape 功能, 使会话完全透明. -f 要求 ssh 在执行命令前退至后台. 它用于当 ssh 准备询问口令或密语, 但是用户希望它在后台进行. 该选项隐含了 -n 选项. 在远端机器上启动 X11 程序的推荐手法就是类似于 ssh -f host xterm 的命令. -g 允许远端主机连接本地转发的端口. -i identity_file 指定一个 RSA 或 DSA 认证所需的身份(私钥)文件. 默认文件是协议第一版的 $HOME/.ssh/identity 以及协议第二版的 $HOME/.ssh/id_rsa 和 $HOME/.ssh/id_dsa 文件. 也可以在配置文件中对每个主机单独指定身份文件. 可以同时使用多个 -i 选项 (也可以在配置文件中指定多个身份文件). -I smartcard_device 指定智能卡(smartcard)设备. 参数是设备文件, ssh 能够用它和智能卡通信, 智能卡里面存储了用户的 RSA 私钥. -k 禁止转发 Kerberos 门票和 AFS 令牌. 可以在配置文件中对每个主机单独设定这个参数. -l login_name 指定登录远程主机的用户. 可以在配置文件中对每个主机单独设定这个参数. -m mac_spec 另外, 对于协议第二版, 这里可以指定一组用逗号隔开, 按优先顺序排列的 MAC(消息验证码)算法 (message authentication code). 详情以 MACs 为关键字查询. -n 把 stdin 重定向到 /dev/null (实际上防止从 stdin 读取数据). ssh 在后台运行时一定会用到这个选项. 它的常用技巧是远程运行 X11 程序. 例如, ssh -n shadows.cs.hut.fi emacs & 将会在 shadows.cs.hut.fi 上启动 emacs, 同时自动在加密通道中转发 X11 连接. ssh 在后台运行. (但是如果 ssh 要求口令或密语, 这种方式就无法工作; 参见 -f 选项.) -N 不执行远程命令. 用于转发端口. (仅限协议第二版) -o option 可以在这里给出某些选项, 格式和配置文件中的格式一样. 它用来设置那些没有命令行开关的选项. -p port 指定远程主机的端口. 可以在配置文件中对每个主机单独设定这个参数. -q 安静模式. 消除所有的警告和诊断信息. -s 请求远程系统激活一个子系统. 子系统是 SSH2 协议的一个特性, 能够协助 其他应用程序(如 sftp)把SSH用做安全通路. 子系统通过远程命令指定. -t 强制分配伪终端. 可以在远程机器上执行任何全屏幕(screen-based)程序, 所以非常有用, 例如菜单服务. 并联的 -t 选项强制分配终端, 即使 ssh 没有本地终端. -T 禁止分配伪终端. -v 冗详模式. 使 ssh 打印关于运行情况的调试信息. 在调试连接, 认证和配置问题时非常有用. 并联的 -v 选项能够增加冗详程度. 最多为三个. -x 禁止 X11 转发. -X 允许 X11 转发. 可以在配置文件中对每个主机单独设定这个参数. 应该谨慎使用 X11 转发. 如果用户在远程主机上能够绕过文件访问权限 (根据用户的X授权数据库), 他就可以通过转发的连接访问本地 X11 显示器. 攻击者可以据此采取行动, 如监视键盘输入等. -C 要求进行数据压缩 (包括 stdin, stdout, stderr 以及转发 X11 和 TCP/IP 连接 的数据). 压缩算法和 gzip(1) 的一样, 协议第一版中, 压缩级别 “level” 用 CompressionLevel 选项控制. 压缩技术在 modem 线路或其他慢速连接上很有用, 但是在高速网络上反而 可能降低速度. 可以在配置文件中对每个主机单独设定这个参数. 另见 Compression 选项. -F configfile 指定一个用户级配置文件. 如果在命令行上指定了配置文件, 系统级配置文件 (/etc/ssh/ssh_config) 将被忽略. 默认的用户级配置文件是 $HOME/.ssh/config. -L port:host:hostport 将本地机(客户机)的某个端口转发到远端指定机器的指定端口. 工作原理是这样的, 本地机器上分配了一个 socket 侦听 port 端口, 一旦这个端口上有了连接, 该连接就经过安全通道转发出去, 同时远程主机和 host 的 hostport 端口建立连接. 可以在配置文件中指定端口的转发. 只有 root 才能转发特权端口. IPv6 地址用另一种格式说明: port/host/hostport -R port:host:hostport 将远程主机(服务器)的某个端口转发到本地端指定机器的指定端口. 工作原理是这样的, 远程主机上分配了一个 socket 侦听 port 端口, 一旦这个端口上有了连接, 该连接就经过安全通道转向出去, 同时本地主机和 host 的 hostport 端口建立连接. 可以在配置文件中指定端口的转发. 只有用 root 登录远程主机 才能转发特权端口. IPv6 地址用另一种格式说明: port/host/hostport -D port 指定一个本地机器 “动态的” 应用程序端口转发. 工作原理是这样的, 本地机器上分配了一个 socket 侦听 port 端口, 一旦这个端口上有了连接, 该连接就经过安全通道转发出去, 根据应用程序的协议可以判断出远程主机将和哪里连接. 目前支持 SOCKS4 协议, ssh 将充当 SOCKS4 服务器. 只有 root 才能转发特权端口. 可以在配置文件中指定动态端口的转发. -1 强制 ssh 只使用协议第一版. -2 强制 ssh 只使用协议第二版. -4 强制 ssh 只使用 IPv4 地址. -6 强制 ssh 只使用 IPv6 地址. 配 ssh 可以从用户级配置文件和系统级配置文件中获取更多的配置数据. 配置文件的格式及其内容参见 ssh_config(5). 环 ssh 一般将设置下面的环境变量: DISPLAY 环境变量 DISPLAY 指出 X11 服务器的位置. ssh 自动设置这个变量, 变量指向 “hostname:n” 格式的数据, 其中 hostname 指出运行 shell 的主机, 而 n 是大于等于 1 的整数. ssh 根据这个数据, 用安全通路转发 X11 连接. 用户一般不需要主动设置 DISPLAY 变量, 否则会导致 X11 连接不安全 (而且会导致用户手工复制所需的授权 cookie). HOME 设置为用户根目录的路径. LOGNAME 等于 USER; 用来兼容使用这个变量的系统. MAIL 设置为用户邮箱的路径. PATH 设置为默认的 PATH, 如同编译 ssh 时要求的一样. SSH_ASKPASS 如果 ssh 需要一个密语(passphrase), 只要它是终端上启动的, 它会从当前终端上读取. 如果 ssh 没有联接终端, 但是设置了 DISPLAY 和 SSH_ASKPASS 变量, ssh 就运行 SSH_ASKPASS 指定的程序, 打开一个 X11 窗口读取密语. 当从 .Xsession 或类似的 script 中调用 ssh 时, 这个功能特别有用. (注意, 某些机器上可能需要将输入重定向为 /dev/null 才能工作.) SSH_AUTH_SOCK 标识某个 UNIX 域 socket 的路径, 用于和代理通信. SSH_CONNECTION 标识连接的客户端和服务器端. 变量包含四个用空格隔开的字段: 客户端IP地址, 客户端端口号, 服务器IP地址, 服务器端口号. SSH_ORIGINAL_COMMAND 如果强制执行了某条命令, 该变量就保存了最初的命令行. 可以用它获取初始参数. SSH_TTY 设置为关联当前 shell 或命令的终端名字(设备的路径). 如果会话没有终端, 就不设置这个变量. TZ 如果启动后台进程(daemon)时设置了时区, 就设置这个时区变量, 指出现在的时区 (就是说, 后台进程会把这个变量传给新建连接). USER 设置为登录的用户名. 另外, 如果允许用户改变他们的环境数据, 而且有 $HOME/.ssh/environment 这个文件, ssh 将读取其中数据, 把 “VARNAME=value” 这种格式的数据行添加进环境数据区. 另见 sshd_config(5) 的 PermitUserEnvironment 选项. 文 $HOME/.ssh/known_hosts 主机密钥的记录, 记录有用户登录上来, 但是没有列在 /etc/ssh/ssh_known_hosts 中的主机. 参见 sshd(8). $HOME/.ssh/identity, $HOME/.ssh/id_dsa, $HOME/.ssh/id_rsa 包含了用户的身份信息. 它们分别是协议第一版的 RSA, 协议第二版的 DSA, 协议第二版的 RSA. 这些文件存有敏感信息, 只应由该用户读取, 不允许其他用户 访问(读/写/执行). 注意, 如果一个私钥文件能够让其他用户访问, ssh 将忽略这个文件. 在生成密钥的时候可以指定一个密语(passphrase), 用这个密语和 3DES 加密文件的敏感部分. $HOME/.ssh/identity.pub, $HOME/.ssh/id_dsa.pub, $HOME/.ssh/id_rsa.pub 包含认证用的公钥 (以文本格式保存的身份文件的公开部分). 如果用户希望用协议第一版的 RSA 认证登录这些机器, $HOME/.ssh/identity.pub 的内容应该添加到所有机器的 $HOME/.ssh/authorized_keys 中. 如果用户希望用协议第二版的 DSA/RSA 认证登录这些机器, $HOME/.ssh/id_dsa.pub 和 $HOME/.ssh/id_rsa.pub 的内容应该添加到所有机器的 $HOME/.ssh/authorized_keys 中. 这些文件没有敏感数据, 可以(但不是必须)让任何人读取. ssh 绝不会自动访问这些文件, 它们也不是不可或缺; 只是为了用户方便才提供这些文件. $HOME/.ssh/config 用户级配置文件. ssh_config(5) 描述了文件格式及其配置选项. $HOME/.ssh/authorized_keys 存放 RSA/DSA 公钥, 用户通过它登录机器. sshd(8) 手册页描述了这个文件的格式. 最简单的文件格式和 .pub 身份文件一样. 文件内容并非高度敏感, 但是仍然建议仅让此文件的用户读写, 而拒绝其他用户的访问. /etc/ssh/ssh_known_hosts 已知的主机密钥的系统级列表. 系统管理员应该准备好这个文件, 把所需主机的公钥 保存在文件里面. 这个文件应该能够全局读取. 文件中一行一支公钥, 格式是 (字段用空格隔开): 系统名字, 公钥, 可选的注释域. 如果同一个机器使用了多个名字, 所有名字都应该(用逗号隔开)列出来. 文件格式在 sshd(8) 手册页中有描述. 登录的时候, sshd(8) 用规范的系统名字(名字服务器返回的)确认客户机; 其他名字也需要, 因为校验密钥前 ssh 不会把用户提供的名字转换为规范名字, 防止能够操作名字服务器的人欺骗主机认证. /etc/ssh/ssh_config 系统级配置文件. ssh_config(5) 描述了文件格式和配置选项. /etc/ssh/ssh_host_key, /etc/ssh/ssh_host_dsa_key, /etc/ssh/ssh_host_rsa_key 这三个文件包含了主机密钥的私有部分, 它们用于 RhostsRSAAuthentication 和 HostbasedAuthentication. 如果使用了协议第一版的 RhostsRSAAuthentication 方法, ssh 必须是 setuid root, 因为只有 root 才能读取主机密钥. 而对于协议第二版的 HostbasedAuthentication 方法, ssh 使用 ssh-keysign(8) 访问主机密钥. 这样消除了验证身份时对 ssh setuid root 的要求. 默认情况下 ssh 不是 setuid root. $HOME/.rhosts 该文件用于 .rhosts 认证, 里面列出允许登录的主机/用户对. (注意 rlogin 和 rsh 也使用这个文件, 导致这个文件的应用变得不安全) 文件中的每一行包括一个主机名字(用名字服务器返回的规范名字), 和主机上的 用户名字, 用空格隔开. 某些机器上, 如果用户根目录位于 NFS 分区, 这个文件可能需要全局可读, 因为 sshd(8) 以 root 身份读它. 此外, 该文件必须属于这个用户, 其他人不允许持有写权限. 对大多数机器推荐的访问权限是, 它的用户可以读写, 而不让其他人访问. 注意, 默认情况下会安装 sshd(8) , 因此在允许 .rhosts 认证前, sshd(8) 要求成功进行了 RSA 主机验证. 如果没有 /etc/ssh/ssh_known_hosts 文件存放客户的主机密钥, 密钥可以存放在 $HOME/.ssh/known_hosts 中. 最简单的做法是用 ssh 从服务器回连客户机; 这样会自动把主机密钥添加到 $HOME/.ssh/known_hosts. $HOME/.shosts 这个文件的用法和 .rhosts 完全一样. 它的目的是允许 ssh 做 rhosts 认证的同时防止 rlogin 或 rsh(1) 登录. /etc/hosts.equiv .rhosts 认证 使用这个文件. 它包含规范的主机名字, 一行一个( sshd(8) 手册页描述了完整的格式). 如果文件中发现了客户机的名字, 而且客户机和服务器的用户名相同, 则自动允许登录. 另外, 一般情况下要求 RSA 主机认证成功. 这个文件只应该让 root 可写. /etc/ssh/shosts.equiv 这个文件的用法和 /etc/hosts.equiv 完全一样. 用于允许 ssh 登录, 但不允许 rsh/rlogin 的时候. /etc/ssh/sshrc 当用户登录后, 运行 shell (或命令)前, ssh 执行这个文件中的命令. 详见 sshd(8) 手册页. $HOME/.ssh/rc 当用户登录后, 运行 shell (或命令)前, ssh 执行这个文件中的命令. 详见 sshd(8) 手册页. $HOME/.ssh/environment 含有关于环境变量的附加定义, 另见前面的 ENVIRONMENT 节. 诊 ssh 结束时的状态码就是远端命令结束时的返回码, 如果发生了错误就返回255. 作 OpenSSH 源自最初 Tatu Ylonen 发表的自由 ssh 1.2.12. Aaron Campbell, Bob Beck, Markus Friedl, Niels Provos, Theo de Raadt 和 Dug Song 消除了许多 BUGS, 增加新的特征, 从而创建了 OpenSSH. Markus Friedl 贡献了对 SSH 协议1.5版和2.0版的支持. 另 rsh(1), scp(1), sftp(1), ssh-add(1), ssh-agent(1), ssh-keygen(1), telnet(1), ssh_config(5), ssh-keysign(8), sshd(8) T. Ylonen, T. Kivinen, M. Saarinen, T. Rinne, and S. Lehtinen, SSH Protocol Architecture, draft-ietf-secsh-architecture-12.txt, January 2002, work in progress material. [中 徐明 <xuming@users.sourceforge.net> [中 2004/06/11 第一版 《 http://cmpp.linuxforum.net BSD September 25, 1999 BSD
提炼要点:
1.使用ssh-keygen可以获取到RSA密钥对。
2.X11服务不是默认开启的
3.认证代理的链接不是默认转发的
远程程序本地展示
使用命令
ssh user@host "comment" -V -A -X
说明:使用Linux的ssh 服务来 调用 X11 协议获取远程的Qt传输显示的界面数据,同时使用代理认证的方式避免传输安全拦截问题。
如果不使用说明,会怎样?
由于使用 Linux 协议远端访问,启动的程序将不能定义到准确的协议库, 请联想动态库的本质——汇编或者机器码级别的。
错误展示:
代码方式:
qt.qpa.screen: QXcbConnection: Could not connect to display Could not connect to any X display.
这里的错误含义是说:使用Qt编写的前端UI界面在启动时找不到任何的X协议供他展示图形化界面