ssh用於登錄遠程主機, 並且在遠程主機上執行命令,它的目的是替換rlogin和rsh,同時在不安全的網絡之上,兩個互不信任的主機之間, 提供加密的, 安全的通信連接.先來看一下ssh命令的一些參數:
參數
-a
禁止轉發認證代理的連接.
-A
允許轉發認證代理的連接. 可以在配置文件中對每個主機單獨設定這個參數.
代理轉發須謹慎. 某些用戶能夠在遠程主機上繞過文件訪問權限 (由於代理的 UNIX 域 socket), 他們可以通過轉發的連接訪問本地代理. 攻擊者不可能從代理獲得密鑰內容, 但是他們能夠操作這些密鑰, 利用加載到代理上 的身份信息通過認證.
-b bind_address
在擁有多個接口或地址別名的機器上, 指定收發接口.
-c blowfish|3des|des
選擇加密會話的密碼術. 3des 是默認算法. 3des (triple-des) 用三支不同的密鑰做加密-解密-加密三次運算, 被認為比較可靠. blowfish 是一種快速的分組加密術(block cipher), 非常安全, 而且速度比 3des 快的多. des 僅支持 客戶端, 目的是能夠和老式的不支持 3des 的協議第一版互操作. 由於其密碼算法上的弱點, 強烈建議避免使用.
-c cipher_spec
另外, 對於協議第二版, 這裡可以指定一組用逗號隔開, 按優先順序排列的密碼術. 詳見 Ciphers
-e ch|^ch|none
設置 pty 會話的 escape 字符 (默認字符: `~' ) . escape 字符只在行首有效, escape 字符後面跟一個點 (`.' ) 表示結束連接, 跟一個 control-Z 表示掛起連接(suspend), 跟 escape 字符自己 表示輸出這個字符. 把這個字符設為 ``none 則禁止 escape 功能, 使會話完全透明.
-f
要求 在執行命令前退至後台. 它用於當 准備詢問口令或密語, 但是用戶希望它在後台進行. 該選項隱含了 -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)設備. 參數是設備文件, 能夠用它和智能卡通信, 智能卡裡面存儲了用戶的 RSA 私鑰.
-k
禁止轉發 Kerberos 門票和 AFS 令牌. 可以在配置文件中對每個主機單獨設定這個參數.
-l login_name
指定登錄遠程主機的用戶. 可以在配置文件中對每個主機單獨設定這個參數.
-m mac_spec
另外, 對於協議第二版, 這裡可以指定一組用逗號隔開, 按優先順序排列的 MAC(消息驗證碼)算法 (message authentication code). 詳情以 MACs 為關鍵字查詢.
-n
把 stdin 重定向到 /dev/null (實際上防止從 stdin 讀取數據). 在後台運行時一定會用到這個選項. 它的常用技巧是遠程運行 X11 程序. 例如, ssh -n shadows.cs.hut.fi emacs 將會在 shadows.cs.hut.fi 上啟動 emacs, 同時自動在加密通道中轉發 X11 連接. 在後台運行. (但是如果 要求口令或密語, 這種方式就無法工作; 參見 -f 選項.)
-N
不執行遠程命令. 用於轉發端口. (僅限協議第二版)
-o option
可以在這裡給出某些選項, 格式和配置文件中的格式一樣. 它用來設置那些沒有命令行開關的選項.
-p port
指定遠程主機的端口. 可以在配置文件中對每個主機單獨設定這個參數.
-q
安靜模式. 消除所有的警告和診斷信息.
-s
請求遠程系統激活一個子系統. 子系統是 SSH2 協議的一個特性, 能夠協助 其他應用程序(如 sftp)把SSH用做安全通路. 子系統通過遠程命令指定.
-t
強制分配偽終端. 可以在遠程機器上執行任何全屏幕(screen-based)程序, 所以非常有用, 例如菜單服務. 並聯的 -t 選項強制分配終端, 即使 沒有本地終端.
-T
禁止分配偽終端.
-v
冗詳模式. 使 打印關於運行情況的調試信息. 在調試連接, 認證和配置問題時非常有用. 並聯的 -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 協議, 將充當 SOCKS4 服務器. 只有 root 才能轉發特權端口. 可以在配置文件中指定動態端口的轉發.
-1
強制 只使用協議第一版.
-2
強制 只使用協議第二版.
-4
強制 只使用 IPv4 地址.
-6
強制 只使用 IPv6 地址.
基本用法
最簡單的 SSH 命令只需要指定用戶名和主機名參數即可. 主機名可以是 IP 地址或者域名. 命令格式如下:
復制代碼代碼如下:
$ ssh user@hostname
比如要在我的局域網內登錄一個樹莓派系統, 只需要簡單的在命令行輸入如下命令:
復制代碼代碼如下:
$ ssh [email protected]
命令中的 pi 和 10.42.0.47 分別是我的樹莓派系統的用戶名和局域網 IP 地址. 實際使用時主機名需要改成你的目標主機(局域網內或者遠程)的 IP 地址.
如果你能夠成功登陸, 那麼下面的內容對你來說就輕而易舉了.
使用其他端口
SSH 默認連接到目標主機的 22 端口上,但是由於各種原因你可能需要連接到其他端口.
復制代碼代碼如下:
$ ssh -p 10022 user@hostname
如上命令就是通過添加參數 -p 指定端口號為 10022.
遠程執行命令
有時在遠程主機執行一條命令並顯示到本地, 然後繼續本地工作是很方便的. SSH 就能滿足這個需求:
復制代碼代碼如下:
$ ssh [email protected] ls -l
比如上面這個命令就會枚舉遠程主機的主目錄內容並在本地顯示. 是不是很酷? 你可以嘗試下其他命令看看.
掛載遠程文件系統
另外一個很贊的基於 SSH 的工具叫 sshfs. sshfs 可以讓你在本地直接掛載遠程主機的文件系統.
復制代碼代碼如下:
$ sshfs -o idmap=user user@hostname:/home/user ~/Remote
比如下面這條命令:
復制代碼代碼如下:
$ sshfs -o idmap=user [email protected]:/home/pi ~/Pi
該命令就將遠程主機 pi 用戶的主目錄掛載到本地主目錄下的 Pi 文件夾.
要詳細了解可以參考 sshfs 教程.
X11 圖形界面
假如現在你想要在遠程主機運行一個圖形界面的程序, SSH 已經幫你想到了! 用前面提到的 SSH 基本命令加上參數 -X 連接到遠程主機即可開啟 X11 轉發功能. 登錄後你可能覺得沒什麼差別, 但是當你運行一個圖形界面程序後就會發現其中的不同的.
復制代碼代碼如下:
$ ssh -X [email protected]
$ pistore
如果你想在運行圖形界面程序的同時做些別的事情, 只需要簡單地在命令末尾加一個 & 符號.
復制代碼代碼如下:
$ pistore&
轉義字符
SSH 提供了多樣的轉義字符功能. 用 SSH 連接到任意一台遠程主機然後輸入 ~? 你就可以看到支持的轉義字符和功能說明列表. 以下例子展示了 ~# 和 ~C 的效果.
配置 SSH
如果你需要改變 SSH 的配置, 請用你喜好的文本編輯器打開 /etc/ssh/sshd_config 進行編輯. 比如你想改變登陸的標語, 在配置文件中找到下面這行:
復制代碼代碼如下:
#Banner none
刪除 # 字符(取消該行的注釋), 將 none 替換為包含你期望顯示內容的文件地址. 修改後該行應該類似這樣:
復制代碼代碼如下:
Banner /etc/issue
在配置文件 /etc/ssh/sshd_config 中你還可以找到端口號, 空閒超時時間等配置項. 配置項大都比較容易理解, 但是保險起見在你修改一些不是很確定的配置項時最好參考下 SSH 的幫助文檔.
構建 ssh 密鑰對
運行以下命令創建密鑰對:
復制代碼代碼如下:
$ ssh-keygen -t dsa
此命令會要求你輸入密碼(可以留空), 然後就會生成密鑰並會顯示一張該密鑰對應的隨機圖.
尋找主機密鑰
在你准備添加密鑰之前不妨先用以下命令看看是否已經添加了對應主機的密鑰了.
復制代碼代碼如下:
$ ssh-keygen -F 10.42.0.47
刪除主機密鑰
某些情況下, 比如主機地址更改或者不再使用某個密鑰, 你就可能需要刪除某個密鑰.
復制代碼代碼如下:
$ ssh-keygen -R 10.42.0.47
用以上命令就可刪除. 這比手動在 ~/.ssh/known_hosts 文件中刪除要方便很多.
總結
通過以上的內容你應該可以輕松使用 SSH 了. SSH 還有很多功能值得你去發掘, 這就要看你的想象力了。