考虑以下两个命令:
create-smtp-message | ssh -p 25 serveraccount
create-smtp-message | ssh serveraccount telnet localhost 25
根据我对ssh(1)的理解,他们都应该做同样的事情。 相反,第二个将发送create-smtp-message的输出到serveraccount(即,它的工作)的服务器的端口25,而第一个只是挂起。
我猜这只是我误解了什么时候给予-p标志ssh,但如果有一些configuration错误:类似的命令发出的客户端是OSX的老虎与openssh ssh(OpenSSH_5.1p1, OpenSSL 0.9.7l 2006年9月28日),服务器用openssh sshd(OpenSSH_3.8.1p1 Debian-8.sarge.6,OpenSSL 0.9.7e 2004年10月25日)运行Debian Sarge(确实必须升级!)。 授权正在使用DSA,如.ssh / config文件中所述。
你的第一个例子是告诉ssh连接到非标准端口上的ssh守护进程(服务器端进程),在这种情况下是25.如果sshd守护进程没有监听这个端口,连接尝试会超时或者出错一个协议问题,正如你所遇到的。
第二个是告诉ssh与“serveraccount”(通过端口22发生)进行正常连接,然后远程执行telnet命令localhost:25。 create-smtp-message的输出成为stdin到你的telnet命令,从而允许你的SMTP服务器接收你的消息。
ssh需要在另一端联系sshd。 -p选项指定该联系人将发生的端口,如果不是默认端口。 这是不是有人可以ssh到SMTP服务器,或Web服务器。 但是,这是第一行尝试的错误,它失败,因为这些端口不是一个sshd,可以处理和解密ssh的encryption协议。 请记住,-p选项只有在那里,偏执狂才能将其sshd端口移动到一些不明显的数字。
ssh不是telnet的克隆,而是telnet的主要但不安全应用的安全replace – 创build远程terminal连接。
telnet的一个传统使用,它仍然是有用的,是创build一个愚蠢的terminal连接到系统中的任何端口。 然后,您可以逐字发送和接收字符到该端口。 在你的第2行中,你使用ssh来encryption与远程主机的会话,然后在远程主机上调用该主机上的telnet来将会话中的信息发送到smtp服务器。
另一方面,Ssh试图用encryption技术来包装所有东西,而不是清晰的文本,并且需要一个sshd来进行通信,这是解密过程的唯一途径。
你可能想知道的是使用sshencryption端口转发未encryption的stream量端口,但这是一个高级应用程序,并不清楚你是否需要它。 你的第二行可能足够你的陈述的目的。