共找到5條詞條名為ssh的結果 展開
ssh
安全外殼協議
SSH 為 Secure Shell 的縮寫,由 IETF 的網路小組(Network Working Group)所制定;SSH 為建立在應用層基礎上的安全協議。SSH 是目前較可靠,專為遠程登錄會話和其他網路服務提供安全性的協議。利用 SSH 協議可以有效防止遠程管理過程中的信息泄露問題。SSH最初是UNIX系統上的一個程序,後來又迅速擴展到其他操作平台。SSH在正確使用時可彌補網路中的漏洞。SSH客戶端適用於多種平台。幾乎所有UNIX平台—包括HP-UX、Linux、AIX、Solaris、Digital UNIX、Irix,以及其他平台,都可運行SSH。
傳統的網路服務程序,如:ftp、pop和telnet在本質上都是不安全的,因為它們在網路上用明文傳送口令和數據,別有用心的人非常容易就可以截獲這些口令和數據。而且,這些服務程序的安全驗證方式也是有其弱點的,就是很容易受到“中間人”(man-in-the-middle)這種方式的攻擊。所謂“中間人”的攻擊方式,就是“中間人”冒充真正的伺服器接收你傳給伺服器的數據,然後再冒充你把數據傳給真正的伺服器。伺服器和你之間的數據傳送被“中間人”一轉手做了手腳之後,就會出現很嚴重的問題。通過使用SSH,你可以把所有傳輸的數據進行加密,這樣"中間人"這種攻擊方式就不可能實現了,而且也能夠防止DNS欺騙和IP欺騙。使用SSH,還有一個額外的好處就是傳輸的數據是經過壓縮的,所以可以加快傳輸的速度。SSH有很多功能,它既可以代替Telnet,又可以為FTP、PoP、甚至為PPP提供一個安全的"通道"。
從客戶端來看,SSH提供兩種級別的安全驗證。
第一種級別(基於口令的安全驗證)
只要你知道自己帳號和口令,就可以登錄到遠程主機。所有傳輸的數據都會被加密,但是不能保證你正在連接的伺服器就是你想連接的伺服器。可能會有別的伺服器在冒充真正的伺服器,也就是受到“中間人”這種方式的攻擊。
第二種級別(基於密匙的安全驗證)
需要依靠密匙,也就是你必須為自己創建一對密匙,並把公用密匙放在需要訪問的伺服器上。如果你要連接到SSH伺服器上,客戶端軟體就會向伺服器發出請求,請求用你的密匙進行安全驗證。伺服器收到請求之後,先在該伺服器上你的主目錄下尋找你的公用密匙,然後把它和你發送過來的公用密匙進行比較。如果兩個密匙一致,伺服器就用公用密匙加密“質詢”(challenge)並把它發送給客戶端軟體。客戶端軟體收到“質詢”之後就可以用你的私人密匙解密再把它發送給伺服器。
用這種方式,你必須知道自己密匙的口令。但是,與第一種級別相比,第二種級別不需要在網路上傳送口令。
第二種級別不僅加密所有傳送的數據,而且“中間人”這種攻擊方式也是不可能的(因為他沒有你的私人密匙)。但是整個登錄的過程可能需要10秒。
如果你考察一下接入ISP(Internet Service Provider,網際網路服務供應商)或大學的方法,一般都是採用Telnet或POP郵件客戶進程。因此,每當要進入自己的賬號時,你輸入的密碼將會以明碼方式發送(即沒有保護,直接可讀),這就給攻擊者一個盜用你賬號的機會—最終你將為他的行為負責。由於SSH的源代碼是公開的,所以在Unix世界里它獲得了廣泛的認可。Linux其源代碼也是公開的,大眾可以免費獲得,並同時獲得了類似的認可。這就使得所有開發者(或任何人)都可以通過補丁程序或b u g修補來提高其性能,甚至還可以增加功能。開發者獲得並安裝SSH意味著其性能可以不斷提高而無須得到來自原始創作者的直接技術支持。SSH替代了不安全的遠程應用程序。SSH是設計用來替代伯克利版本的r命令集的;它同時繼承了類似的語法。其結果是,使用者注意不到使用SSH和r命令集的區別。利用它,你還可以干一些很酷的事。通過使用SSH,你在不安全的網路中發送信息時不必擔心會被監聽。你也可以使用POP通道和Telnet方式,通過SSH可以利用PPP通道創建一個虛擬個人網路( Virtual Private Network,VPN)。SSH也支持一些其他的身份認證方法,如Kerberos和安全ID卡等。
但是因為受版權和加密演演算法的限制,可以預計將來會有越來越多的人使用SSH而不是Telnet或者POP3等。
SSH 主要由三部分組成:
傳輸層協議 [SSH-TRANS]
提供了伺服器認證,保密性及完整性。此外它有時還提供壓縮功能。 SSH-TRANS 通常運行在TCP/IP連接上,也可能用於其它可靠數據流上。 SSH-TRANS 提供了強力的加密技術、密碼主機認證及完整性保護。該協議中的認證基於主機,並且該協議不執行用戶認證。更高層的用戶認證協議可以設計為在此協議之上。
用戶認證協議 [SSH-USERAUTH]
用於向伺服器提供客戶端用戶鑒別功能。它運行在傳輸層協議 SSH-TRANS 上面。當SSH-USERAUTH 開始后,它從低層協議那裡接收會話標識符(從第一次密鑰交換中的交換哈希H )。會話標識符唯一標識此會話並且適用於標記以證明私鑰的所有權。 SSH-USERAUTH 也需要知道低層協議是否提供保密性保護。
連接協議 [SSH-CONNECT]
將多個加密隧道分成邏輯通道。它運行在用戶認證協議上。它提供了互動式登錄話路、遠程命令執行、轉發 TCP/IP 連接和轉發 X11 連接。
SSH是由客戶端和服務端的軟體組成的,有兩個不兼容的版本分別是:1.x和2.x。用SSH 2.x的客戶程序是不能連接到SSH 1.x的服務程序上去的。OpenSSH 2.x同時支持SSH 1.x和2.x。
服務端是一個守護進程(daemon),他在後台運行並響應來自客戶端的連接請求。服務端一般是sshd進程,提供了對遠程連接的處理,一般包括公共密鑰認證、密鑰交換、對稱密鑰加密和非安全連接。
客戶端包含ssh程序以及像scp(遠程拷貝)、slogin(遠程登陸)、sftp(安全文件傳輸)等其他的應用程序。
他們的工作機制大致是本地的客戶端發送一個連接請求到遠程的服務端,服務端檢查申請的包和IP地址再發送密鑰給SSH的客戶端,本地再將密鑰發回給服務端,自此連接建立。SSH 1.x和SSH 2.x在連接協議上有一些差異。
一旦建立一個安全傳輸層連接,客戶機就發送一個服務請求。當用戶認證完成之後,會發送第二個服務請求。這樣就允許新定義的協議可以與上述協議共存。連接協議提供了用途廣泛的各種通道,有標準的方法用於建立安全互動式會話外殼和轉發(“隧道技術”)專有 TCP/IP 埠和 X11 連接。
SSH被設計成為工作於自己的基礎之上而不利用超級伺服器(inetd),雖然可以通過inetd上的tcpd來運行SSH進程,但是這完全沒有必要。啟動SSH伺服器后,sshd運行起來並在默認的22埠進行監聽(你可以用 # ps -waux | grep sshd 來查看sshd是否已經被正確的運行了)如果不是通過inetd啟動的SSH,那麼SSH就將一直等待連接請求。當請求到來的時候SSH守護進程會產生一個子進程,該子進程進行這次的連接處理。
SSH另類應用:用ssh做socks5代理
1. 下載MyEntunnel。
2.下載PuTTY,解壓到MyEntunnel程序的目錄下。
3.運行MyEntunnel.exe,設置:SSH Server裡頭填上ssh ftp的地址或IP,填好用戶名和密碼,點Connect,系統欄裡面的小鎖變成綠色就連接成功了。
4.設置瀏覽器。IE是不支持socks代理的,用firefox好了,打開firefox的代理設置頁,在socks主機處填上127.0.0.1埠填原先設置的,默認7070。
Win主機環境運行SSH命令的方法
對於Win主機用戶,可以下載工具putty來進行shell管理。具體的命令依賴於登錄到遠端主機所使用的系統和Shell。
一些常用的shell命令如下:
cd[目錄名]轉換路徑
cd.. 返回上級目錄
ls顯示當前目錄下所有文件
rm[-r]-f[][文件名]刪除文件,加[-r]可以刪除文件下所有子文件,如rm[ -r]-f [abc]刪除abc文件夾及文件夾下的所有文件
tar -xzf [解壓下載的壓縮包]
unzip[文件名]解壓文件
cp -rpf .A/* B 將A文件夾中的所有文件拷貝到其上級目錄B中
wget(遠程下載文件到伺服器上)
SSH協議框架中設計了大量可擴展的冗餘能力,比如用戶自定義演演算法、客戶自定義密鑰規則、高層擴展功能性應用協議。這些擴展大多遵循 IANA 的有關規定,特別是在重要的部分,像命名規則和消息編碼方面。
SSH採用面向連接的TCP協議傳輸 應用22號埠 安全係數較高。
方法一:使用批處理文件
在伺服器端安裝目錄下有兩個批處理文件“start-ssh.bat”和“stop-ssh.bat”。運行“start-ssh.bat”文件就可以啟動SSH服務,要停止該服務只要執行“stop-ssh.bat”文件即可。
方法二:使用SSH服務配置程序
在安裝目錄下,運行“fsshconf.exe”程序,它雖是SSH伺服器的配置程序,但也可以用來啟動和停止SSH服務。在彈出的“F-Secure SSH Server Configuration”窗口中,點擊左面列表框中的“Server Settings”后,在右邊的“Service status”欄中會顯示伺服器狀態按鈕,如果伺服器是停止狀態,則按鈕顯示為“Start service”,點擊該按鈕就可啟動SSH服務,再次點擊可停止SSH服務。
方法三:使用NET命令
在伺服器端的“命令提示符”窗口中,輸入“net start ″F-secure SSH Server″”命令,就可以啟動SSH服務,要停止該服務,輸入“net stop ″F-Secure SSH Server″”命令即可。其中“F-Secure SSH Server”為SSH伺服器名,“net start”和“net stop”為Windows系統啟動和停止系統服務所使用的命令。
啟動了SSH服務后,一定要關閉Telnet服務,這樣伺服器就處在安全環境之中了,不用再怕數據被竊取。
SSH 最初是U N I X系統上的一個程序,後來又迅速擴展到其他操作平台。S S H在正確使用時可彌補網路中的漏洞。客戶端包含ssh程序以及像scp(遠程拷貝)、slogin(遠程登陸)、sftp(安全文件傳輸)等其他的應用程序。SSH有很多非常酷的特性,如果它是你每天的工作伴侶,那麼我想你有必要了解以下10條高效使用SSH的秘籍,它們幫你節省的時間肯定會遠遠大於你用來配置它們的時間。
有些時候,你可能沒法直接連接到某台伺服器,而需要使用一台中間伺服器進行中轉,這個過程也可以自動化。首先確保你已經為伺服器配置了公鑰訪問,並開啟了agent forwarding,可以通過2條命令來連接目標伺服器,不會有任何提示輸入:
$ ssh gateway
gateway $ ssh db
然後在你的本地SSH配置中,添加下面這條配置:
Host db
HostName
ProxyCommand ssh gateway netcat -q 600 %h %p
可以通過一條命令來直接連接目標伺服器了:
$ ssh db
這裡你可能會需要等待長一點的時間,因為SSH需要進行兩次認證,注意netcat也有可能被寫成nc或者ncat或者前面還需要加上g,你需要檢查你的中間伺服器來確定實際的參數。
如果你在遠程伺服器上的用戶名和你本地的用戶名不同,你同樣可以在SSH配置中進行設置:
Host www* mail
HostName %h
User simon
就算我的本地用戶名是 smylers,我仍然可以這樣連接我的伺服器:
$ ssh www2
SSH會使用simon賬戶連接你的伺服器,同樣,Putty可以保存這個信息在你的session中。
你也可以在你的SSH配置中直接定義主機別名,就像下面這樣:
Host dev
HostName
你還可以使用通配符來進行分組:
Host dev intranet backup
HostName %h
Host www* mail
HostName %h
在Putty中你可以為每個主機名保存單獨的session,然後雙擊建立連接(但是它可能沒辦法支持通配符)。
輸入伺服器的完整主機名來建立一個新的SSH連接實在是太乏味無聊了,尤其是當你有一組擁有相同域名但是子域名不同的伺服器需要管理時。
或許你的網路已經配置了可以直接使用短域名,比如intranet,但是如果你的網路不支持,實際上你可以自己搞定這個問題,而不用求助網路管理員。
解決辦法根據你用的操作系統而略有差異,下面是我的Ubuntu系統的配置:
prepend domain-search
然後你需要重啟網路:$ sudo restart network-manager
不同的系統,這兩條命令可能會略有差異。
有時候你可能需要從一個伺服器連接另外一個伺服器,比如在兩個伺服器之間直接傳輸數據,而不用通過本地電腦中轉:
www1 $ scp -pr templates www2:$PWD
(順便說一下,當你需要在兩台伺服器間拷貝文件時,$PWD變數時非常有用的),因為即使你已經在兩台伺服器上添加了你本地電腦的公鑰,scp默認仍然會提示你輸入密碼:這是因為你用來作為跳板的那台伺服器上並沒有你的私鑰,所以,第二台伺服器會拒絕你的公鑰,但是一定不要通過將你的私鑰拷貝到中轉伺服器上來解決這個問題,你可以使用agent forwarding來解決這個問題,只要在你的.ssh/config文件中加入下面這行代碼就可以了:ForwardAgent yes或者是在Putty中勾上“Allow agent forwarding”選項,本地SSH就變成了第一台伺服器的SSH代理,從第一台伺服器在連接其它伺服器就變和和在你本地一樣簡單,注意,如果要開啟這個選項,前提是這個中間伺服器值得你信任。
如果你還在通過密碼方式登錄SSH,那麼你或許應該試試SSH Keys,首先使用OpenSSH為自己生成一對密鑰:
$ ssh-keygen
跟隨指示,完成之後,你應該可以在你的.ssh目錄下看到兩個文件,id_rsa就是你的私鑰,而id_ras.pub則是你的公鑰,現 在你需要將你的公鑰拷貝到伺服器上,如果你的系統有ssh-copy-id命令,拷貝會很簡單:
$ ssh-copy-id
否則,你需要手動將你的公鑰拷貝的伺服器上的~/.ssh/authorized_keys文件中:
$ < ~/.ssh/id_rsa.pub ssh ‘mkdir -p .ssh; cat >> .ssh/authorized_keys; chmod go-w .ssh .ssh/authorized_keys’
試試重新連接到SSH伺服器,或是拷貝文件,是不是已經不需要再輸入密碼了?
如果你發現自己每條需要連接同一個伺服器無數次,那麼長連接選項就是為你準備的:
ControlPersist 4h
你每次通過SSH與伺服器建立連接之後,這條連接將被保持4個小時,即使在你退出伺服器之後,這條連接依然可以重用,因此,在你下一次(4小時之內)登錄伺服器時,你會發現連接以閃電般的速度建立完成,這個選項對於通過scp拷貝多個文件提速尤其明顯,因為你不在需要為每個文件做單獨的認證了。
如果你需要在多個窗口中打開到同一個伺服器的連接,而不想每次都輸入用戶名,密碼,或是等待連接建立,那麼你可以配置SSH的連接共享選項,在本地打開你的SSH配置文件,通常它們位於~/.ssh/config,然後添加下面2行:
ControlMaster auto
ControlPath /tmp/ssh_mux_%h_%p_%r
試試斷開你與伺服器的連接,並建立一條新連接,然後打開一個新窗口,再創建一條連接,你會發現,第二條連接幾乎是在瞬間就建立好了。
Windows用戶
如果你是Windows用戶,很不幸,最流行的開源SSH客戶端Putty並不支持這個特性,但是Windows上也有OpenSSH的實現,比如這個Copssh,如果你覺得下面的一些技巧對你很有幫助,或許你應該試試Copssh。
文件傳輸
連接共享不止可以幫助你共享多個SSH連接,如果你需要通過SFTP與伺服器傳輸文件,你會發現,它們使用的依然是同一條連接,如果你使用的Bash,你會發現,你甚至SSH甚至支持Tab對伺服器端文件進行自動補全,共享連接選項對於那些需要藉助SSH的工具,比如rsync,git等等也同樣有效。
如果你確保你和某個伺服器之間的連接是安全的(比如通過公司內網連接),那麼你就可以通過選擇arcfourencryption演演算法來讓數據傳輸更快一些:
Host dev
Ciphers arcfour
注意這個加速是以犧牲數據的“加密”性為代價的,所以如果你連接的是位於網上的伺服器,千萬不要打開這個選項,並且確保你是通過VPN建立的連接。
如果每次連接伺服器都意味著你需要等待幾十秒而無所事事,那麼你或許應該試試在你的SSH配置中加入下面這條:
GSSAPIAuthentication no
如果這條命令有效的話,你應該通知你的系統管理員讓他在伺服器上禁用這個選項,這樣其他人就不用再分別添加這條配置到它們的本地配置了。