遠端聯機服務SSH

2021-09-21 14:42:52 字數 4570 閱讀 2231

遠端聯機伺服器在提供你由遠端透過文字或圖形介面的方式來登入系統, 讓你在遠端的工作機前面登入 linux 主機以取得可操控主機之介面 (shell),而登入後的操作感覺上就像坐在系統前面一樣。

如果你想要使用類似 windows 的遠端桌面聯機,該功能使用的是rdp (remote desktop protocol),那你可得要架設 rdp 伺服器才行。

使用 telnet 登入遠端主機時使用明碼傳輸不安全,ssh 比較安全,其實是透過 ssh 通道傳輸訊息時,該訊息在網路上面比較安全,因為資料是加密過的,即使被竊取, 對方可能也不會知道資料內容為何,因此資訊比較安全。

ssh 是secureshell protocol 的簡寫 (安全的殼程式協議)。

這個 ssh 協議,在預設的狀態中,本身就提供兩個伺服器功能:

乙個就是類似 telnet 的遠端聯機使用 shell 的伺服器,亦即是俗稱的 ssh ;

另乙個就是類似 ftp 服務的 sftp-server !提供更安全的 ftp 服務。

目前常見的網路封包加密技術通常是借由所謂的『非對稱金鑰系統』來處理的。 主要是透過兩把不一樣的公鑰與私鑰 (public and private key) 來進行加密與解密的過程。由於這兩把鑰匙是提供加解密的功用, 所以在同乙個方向的聯機中,這兩把鑰匙當然是需要成對的!它的功用分別如下:

私鑰 (private key):遠端主機使用你的公鑰加密的資料,在本地端就能夠使用私鑰來進行解密。由於私鑰是這麼的重要,因此私鑰是不能夠外流的!只能保護在自己的主機上。

我們可以將 ssh 伺服器端與客戶端的聯機步驟示意為下圖:

伺服器建立公鑰檔: 每一次啟動 sshd 服務時,該服務會主動去找 /etc/ssh/ssh_host* 的檔案,若系統剛剛安裝完成時,由於沒有這些公鑰檔案,因此 sshd 會主動去計算出這些需要的公鑰檔案,同時也會計算出伺服器自己需要的私鑰檔;

客戶端主動聯機要求: 若客戶端想要聯機到 ssh 伺服器,則需要使用適當的客戶端程式來聯機,包括 ssh, pietty 等客戶端程式;

客戶端記錄/比對伺服器的公鑰資料及隨機計算自己的公私鑰: 若客戶端第一次連線到此伺服器,則會將伺服器的公鑰資料記錄到客戶端的使用者家目錄內的 ~/.ssh/known_hosts 。若是已經記錄過該伺服器的公鑰資料,則客戶端會去比對此次接收到的與之前的記錄是否有差異。若接受此公鑰資料, 則開始計算客戶端自己的公私鑰資料;

回傳客戶端的公鑰資料到伺服器端: 使用者將自己的公鑰傳送給伺服器。此時伺服器:『具有伺服器的私鑰與客戶端的公鑰』,而客戶端則是: 『具有伺服器的公鑰以及客戶端自己的私鑰』,你會看到,在此次聯機的伺服器與客戶端的金鑰系統 (公鑰+私鑰) 並不一樣,所以才稱為非對稱式金鑰系統喔。

開始雙向加解密: (1)伺服器到客戶端:伺服器傳送資料時,拿使用者的公鑰加密後送出。客戶端接收後,用自己的私鑰解密; (2)客戶端到伺服器:客戶端傳送資料時,拿伺服器的公鑰加密後送出。伺服器接收後,用伺服器的私鑰解密。

一般使用 ssh 登入遠端主機,都會填寫『 ssh 賬號@主機ip 』的格式, 意思是說,使用該主機的某賬號登入的意思。

# 2. 使用 student 賬號登入本機

[root@www ~]# ssh [email protected]

[email protected]'s password:

[student@www ~]$ exit

# 由於加入賬號,因此切換身份成為 student 了!另外,因為 127.0.0.1 曾登入過,

# 所以就不會再出現提示你要增加主機公鑰的訊息囉!

# 3. 登入對方主機執行過指令後立刻離開的方式:

[root@www ~]# ssh [email protected] find / &> ~/find1.log

student@localhost's password:

# 此時你會發現怎麼畫面卡住了?這是因為上頭的指令會造成,你已經登入遠端主機,

# 但是執行的指令尚未跑完,因此你會在等待當中。那如何指定系統自己跑?

# 4. 與上題相同,但是讓對方主機自己跑該指令,你立刻回到近端主機繼續工作:

[root@www ~]# ssh -f [email protected] find / &> ~/find1.log

# 此時你會立刻登出 127.0.0.1 ,但 find 指令會自己在遠端伺服器跑喔!

[root@www ~]# sftp student@localhost

connecting to localhost...

student@localhost's password: <== 這裡請輸入密碼啊!

sftp> exit <== 這裡就是在等待你輸入 ftp 相關指令的地方了!

例題:假設 localhost 為遠端伺服器,且伺服器上有 student 這個使用者。你想要 (1)將本機的 /etc/hosts 上傳到 student 家目錄,並 (2)將 student 的 .bashrc 複製到本機的 /tmp 底下,該如何透過 sftp 達成?

答:[root@www ~]# sftp student@localhost

sftp> lls /etc/hosts <==先看看本機有沒有這個檔案

/etc/hosts

sftp> put /etc/hosts <==有的話,那就上傳吧!

uploading /etc/hosts to /home/student/hosts

/etc/hosts 100% 243 0.2kb/s 00:00

sftp> ls <==有沒有上傳成功?看遠端目錄下的檔名

hosts

sftp> ls -a <==那有沒有隱藏檔呢?

. .. .bash_history .bash_logout

.bash_profile .bashrc .mozilla hosts

sftt> lcd /tmp <==切換本機目錄到 /tmp

sftp> lpwd <==只是進行確認而已!

local working directory: /tmp

fetching /home/student/.bashrc to .bashrc

/home/student/.bashrc 100% 124 0.1kb/s 00:00

sftp> lls -a <==看本地端檔案檔名

. .font-unix keyring-rnd7qx .x11-unix

.. .gdm_socket lost+found scim-panel-socket:0-root

sftp> exit <==離開吧!

通常使用 sftp 是因為可能不知道伺服器上面有什麼檔名的檔案存在,如果已經知道伺服器上的檔案檔名了, 那麼最簡單的檔案傳輸則是透過 scp 這個指令喔!最簡單的 scp 用法如下:

[root@www ~]# scp [-pr] [-l 速率] file  [賬號@]主機:目錄名 <==上傳

選項與引數:

-p :保留原本檔案的許可權資料;

-l :可以限制傳輸的速度,單位為 kbits/s ,例如 [-l 800] 代表傳輸速限 100kbytes/s

# 1. 將本機的 /etc/hosts* 全部複製到 127.0.0.1 上面的 student 家目錄內

[root@www ~]# scp /etc/hosts* [email protected]:~

[email protected]'s password: <==輸入 student 密碼

hosts 100% 207 0.2kb/s 00:00

hosts.allow 100% 161 0.2kb/s 00:00

hosts.deny 100% 347 0.3kb/s 00:00

# 檔名顯示 進度 容量(bytes) 傳輸速度 剩餘時間

# 你可以仔細看,出現的訊息有五個字段,意義如上所示。

# 2. 將 127.0.0.1 這部遠端主機的 /etc/bashrc 複製到本機的 /tmp 底下

[root@www ~]# scp [email protected]:/etc/bashrc /tmp

ssh遠端服務

不了解ssh協議的請自覺看百科,進入正題 當使用者想與遠端主機建立連線時 ssh user host the authenticity of host localhost 127.0.0.1 can t be established.rsa key fingerprint is09 95 34 79...

ssh遠端服務

ssh 安全外殼協議 為 secure shell 的縮寫,ssh 為建立在應用層基礎上的安全協議。ssh 是較可靠,專為遠端登入會話和其他網路服務提供安全性的協議。利用 ssh 協議可以有效防止遠端管理過程中的資訊洩露問題。ssh最初是unix系統上的乙個程式,後來又迅速擴充套件到其他操作平台。s...

遠端連線服務ssh

ssh 協議使用22埠號,屬於tcp協議 ssh與telnet的區別 ssh在傳輸過程中加密,而telnet不加密 客戶端常用的工具 xshell,crt,putty 服務端ssh服務,程序名為sshd,對應服務軟體是openssh,openssl openssh 用來連線 openssl 用來加密...