前言
簡單的來說,SSH 是 Secure SHell protocol 的簡寫 (安全的殼程序協議),它可以透過數據封包加密技術,將等待傳輸的封包加密后再傳輸到網絡上, 因此,數據訊息當然就比較安全啰!這個 SSH 可以用來取代較不安全的 finger, R Shell (rcp, rlogin, rsh 等), talk 及 telnet 等聯機模式。
啟動ssh服務器
事實上,在我們使用的 Linux 系統當中,默認就已經含有 SSH 的所有需要的軟件了!這包含了可以產生密碼等協議的OpenSSL 軟件與 OpenSSH 軟件 (注1),所以呢,要啟動 SSH 真的是太簡單了!就直接給他啟動就是了!此外,在目前的 Linux Distributions 當中,都是預設啟動 SSH 的,所以一點都不麻煩,因為不用去設定,他就已經啟動了! 哇!真是爽快~無論如何,我們還是得說一說這個啟動的方式吧!直接啟動就是以 SSH daemon ,簡稱為 sshd 來啟動的,所以,手動可以這樣啟動:
/etc/init.d/ssh start
需要注意的是,SSH 不但提供了 shell 給我們使用,亦即是 ssh protocol 的主要目的,同時亦提供了一個較為安全的 FTP server ,亦即是 ssh-ftp server 給我們當成是 FTP 來使用!所以,這個 sshd 可以同時提供 shell 與 ftp 喔!而且都是架構在 port 22 上面的呢!
ssh客戶端
ssh命令行格式
ssh [-f] [-o 參數項目] [-p 非正規埠口] [賬號@]IP [指令] 選項與參數: -f :需要配合后面的 [指令] ,不登入遠程主機直接發送一個指令過去而已; -o 參數項目:主要的參數項目有: ConnectTimeout=秒數 :聯機等待的秒數,減少等待的時間 StrictHostKeyChecking=[yes|no|ask]:預設是 ask,若要讓 public key 主動加入 known_hosts ,則可以設定為 no 即可。 -p :如果你的 sshd 服務啟動在非正規的埠口 (22),需使用此項目; [指令] :不登入遠程主機,直接發送指令過去。但與 -f 意義不太相同。
一般使用 ssh 登入遠程主機,都會填寫【ssh 賬號@主機IP 】的格式, 意思是說,使用該主機的某賬號登入的意思。但是很多朋友都不喜歡寫賬號,亦即使用【ssh 主機IP 】的格式。
直接聯機登入到對方主機的方法 (以登入本機為例)
[root@www ~]# ssh 127.0.0.1 The authenticity of host '127.0.0.1 (127.0.0.1)' can't be established.
RSA key fingerprint is eb:12:07:84:b9:3b:3f:e4:ad:ba:f1:85:41:fc:18:3b. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '127.0.0.1' (RSA) to the list of known hosts. root@127.0.0.1's password: <==在這里輸入 root 的密碼即可!
Last login: Mon Jul 25 11:36:06 2011 from 192.168.1.101 [root@www ~]# exit <==離開這次的 ssh 聯機 # 由於 ssh 后面沒有加上賬號,因此預設使用當前的賬號來登入遠程服務器
如同上面的范例情況。要注意喔,如果不寫賬號的話,那么會以本地端計算機的賬號來嘗試登入遠程。 也就是說,如果近端與遠程具有相同的賬號,那么不寫賬號也沒有關系,如上表中的范例。但是,為了以后習慣着想, 還是一開始就使用類似 email 的方式來登入遠程主機,這樣的行為習慣比較好啦!
上面出現的訊息中,開頭 RSA 的那行后面接的就是遠程服務器的公鑰指紋碼,如果確定該指紋碼沒有問題,那么你就得要輸入 yes 來將該指紋碼寫入服務器公鑰記錄文件 (~/.ssh/known_hosts),以方便未來比對該服務器的正確性之用。 注意是要寫 yes 喔,單純輸入 Y 或 y 是不會被接受的~此外, 由於該主機的公鑰已經被記錄,因此未來重復使用 ssh 登入此主機時,就不會出現這個指紋碼提示了。
使用 student 賬號登入本機
[root@www ~]# ssh student@127.0.0.1 student@127.0.0.1's password:
[student@www ~]$ exit # 由於加入賬號,因此切換身份成為 student 了!另外,因為 127.0.0.1 曾登入過, # 所以就不會再出現提示你要增加主機公鑰的訊息啰!
登入對方主機執行命令后退出
[root@www ~]# ssh student@127.0.0.1 find / &> ~/find1.log student@localhost's password:
# 此時你會發現怎么畫面卡住了?這是因為上頭的指令會造成,你已經登入遠程主機, # 但是執行的指令尚未跑完,因此你會在等待當中。那如何指定系統自己跑? 與上題相同,但是讓對方主機自己跑該指令,你立刻回到近端主機繼續工作: [root@www ~]# ssh -f student@127.0.0.1 find / &> ~/find1.log # 此時你會立刻注銷 127.0.0.1 ,但 find 指令會自己在遠程服務器跑喔!
如果你想要讓遠程主機進行關機的指令,如果不加上 -f 的參數, 那你會等待對方主機關機完畢再將你踢出聯機,這比較不合理。因此,加上 -f 就很重要~因為你會指定遠程主機自己跑關機, 而不需要在空空等待。例如:『ssh -f root@some_IP shutdown -h now 』之類的指令啰。
刪除掉 known_hosts 后,重新使用 root 聯機到本機,且自動加上公鑰記錄
[root@www ~]# rm ~/.ssh/known_hosts [root@www ~]# ssh -o StrictHostKeyChecking=no root@localhost Warning: Permanently added 'localhost' (RSA) to the list of known hosts. root@localhost's password:
# 如上所示,不會問你 yes 或 no 啦!直接會寫入 ~/.ssh/known_hosts 當中!
此時如果每台計算機都在主動加上公鑰文件記錄,都得要輸入『 yes 』,會累死!那么加上這個 StrictHostKeyChecking=no 就很有幫助啦!他會不詢問自動加入主機的公鑰到檔案中,對於一般使用者幫助不大,對於程序腳本來說, 這玩意兒可就很不錯用了!
轉自: http://vbird.dic.ksu.edu.tw/linux_server/0310telnetssh_2.php#ssh_start
END 2019-04-18 10:29:20