概要
SSH
是傳輸層和應(yīng)用層上的安全協(xié)議,它只能通過加密連接雙方會話的方式來保證連接的安全性虐沥。
當(dāng)使用 ssh
客戶端工具連接成功后汰扭,將建立客戶端和服務(wù)端之間的會話德崭,該會話是被加密的,之后客戶端和服務(wù)端的通信都將通過會話傳輸弟胀。
SSH 服務(wù)的守護(hù)進(jìn)程為
sshd
楷力,默認(rèn)監(jiān)聽在22
端口上。
所有 ssh
客戶端工具孵户,包括 ssh
命令弥雹,scp
,sftp
延届,ssh-copy-id
等命令都是借助于 ssh
連接來完成任務(wù)的剪勿。
也就是說它們都連接服務(wù)端的 22
端口,只不過連接上之后將待執(zhí)行的相關(guān)命令轉(zhuǎn)換傳送到遠(yuǎn)程主機上方庭,由遠(yuǎn)程主機執(zhí)行厕吉。
登錄到目標(biāo)機器
ssh [-p port] destination
-p port
選項指定遠(yuǎn)程 sshd
監(jiān)聽的端口。
destination
的格式有以下兩種:
[user@]hostname
-
ssh://[user@]hostname[:port]
(URI 形式(form
)的)
不指定 [user@]
的話械念,默認(rèn)使用本機的當(dāng)前用戶進(jìn)行登錄操作头朱。
-t 和 -T 選項
通過 man ssh
我們可以得知以下信息:
-
-T
:禁止分配偽終端。(Disable pseudo-terminal allocation
) -
-t
:強制分配偽終端龄减。(Force pseudo-terminal allocation
)
小朋友你是否有很多問號项钮?
- (1)什么是偽終端(
pseudo-terminal
)? - (2)偽終端在
ssh
客戶端還是服務(wù)端創(chuàng)建希停? - (2)
ssh
是否分配偽終端的區(qū)別是什么烁巫?
解答:
- (1) 偽終端的介紹請參考: Linux 的偽終端的基本原理 及其在遠(yuǎn)程登錄(SSH,telnet等)中的應(yīng)用
- (2)偽終端在
ssh
服務(wù)端創(chuàng)建 - (3)不分配偽終端宠能,會導(dǎo)致一些需要
tty
的命令無法正常使用亚隙。比如vim
ssh
命令存在兩種基本模式,一是登錄到遠(yuǎn)程機器违崇,二是在遠(yuǎn)程機器上執(zhí)行代碼阿弃。
登錄模式
meikai@ubuntu:~$ ssh localhost
Welcome to Ubuntu 20.04.2 LTS (GNU/Linux 5.8.0-50-generic x86_64)
Last login: Tue Apr 27 23:51:26 2021 from 127.0.0.1
meikai@ubuntu:~$ tty
/dev/pts/5
從上面可以看出诊霹,【登錄模式】默認(rèn)會分配偽終端 tty
。
meikai@ubuntu:~$ ssh -T localhost
Welcome to Ubuntu 20.04.2 LTS (GNU/Linux 5.8.0-50-generic x86_64)
tty
not a tty
指定 -T
選項后渣淳,會禁止 tty
的分配脾还。
執(zhí)行不需要 tty
的命令顯示正常:
uname -a
Linux ubuntu 5.8.0-50-generic #56~20.04.1-Ubuntu SMP Mon Apr 12 21:46:35 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
此時執(zhí)行 vim
命令(需要一個 tty
偽終端)會出現(xiàn)如下所示的錯誤:
vim aa
Vim: Warning: Output is not to a terminal
Vim: Warning: Input is not from a terminal
命令模式
meikai@ubuntu:~$ ssh localhost "tty"
not a tty
從上面可以看出,【命令模式】默認(rèn)不會分配偽終端 tty
入愧。
我們通過【命令模式】執(zhí)行 vim
命令會出現(xiàn)上文同樣的錯誤鄙漏。
meikai@ubuntu:~$ ssh localhost "vim aa"
Vim: Warning: Output is not to a terminal
Vim: Warning: Input is not from a terminal
指定 -t
選項后,會對當(dāng)前的 ssh session
分配一個 tty
砂客。
meikai@ubuntu:~$ ssh localhost -t "tty"
/dev/pts/7
Connection to localhost closed.
此時可以正常執(zhí)行 vim
命令泥张。
meikai@ubuntu:~$ ssh localhost -t "vim aa"
Connection to localhost closed.
保存一些文本后,我們可以通過 cat aa
命令進(jìn)行查詢鞠值,確認(rèn)進(jìn)行了正常的保存操作媚创。
meikai@ubuntu:~$ cat aa
aa
aaa
bbb
至此,我們可以得出以下結(jié)論:
- 【登錄模式】
- 默認(rèn)分配偽終端彤恶,同指定
-t
選項效果相同钞钙。 - 可以通過
-T
選項禁止分配偽終端。
- 默認(rèn)分配偽終端彤恶,同指定
- 【命令模式】
- 默認(rèn)不分配偽終端声离,同指定
-T
選項效果相同芒炼。 - 可以通過
-t
選項強制分配偽終端。
- 默認(rèn)不分配偽終端声离,同指定
通過 man ssh
术徊,我們還可以得知:如果未分配偽終端本刽,則該會話是透明的,可用于可靠地傳輸二進(jìn)制數(shù)據(jù)赠涮。(If no pseudo-terminal has been allocated, the session is transparent and can be used to reliably transfer binary data.
)
問:如何理解【會話是透明的】呢子寓?
答:網(wǎng)絡(luò)數(shù)據(jù)可以不通過偽終端進(jìn)行中轉(zhuǎn)操作直接寫入到對應(yīng)的程序中。參考 Linux 的偽終端的基本原理 及其在遠(yuǎn)程登錄(SSH笋除,telnet等)中的應(yīng)用 一文斜友。
參考
man ssh
- 高級 SSH 速查表 | Linux 中國
- liunx常用命令:ssh
- 用好SSH端口轉(zhuǎn)發(fā),會解決很多問題
- SSH隧道介紹與實戰(zhàn)
- ssh的簡介與常用用法
- SSH常用功能
- ssh和sshd服務(wù)
- SSH原理與運用(一):遠(yuǎn)程登錄-阮一峰
- SSH原理與運用(二):遠(yuǎn)程操作與端口轉(zhuǎn)發(fā)-阮一峰
- Linux 的偽終端的基本原理 及其在遠(yuǎn)程登錄(SSH垃它,telnet等)中的應(yīng)用
- linux mkfifo命令基本用法
- Linux 標(biāo)準(zhǔn)輸入輸出鲜屏、管道符、重定向
- linux 偽終端設(shè)備 /dev/ptmx
- Linux TTY/PTS概述(轉(zhuǎn)載)
- linux分享之淺談標(biāo)準(zhǔn)輸入輸出
- https://askubuntu.com/questions/481906/what-does-tty-stand-for