c語言ssh
㈠ 需求:linux腳本ssh登錄到A機器然後再ssh到B機器然後再ssh到C機器,執行命令。這個腳本怎麼寫
#!/usr/bin/expect
spawnsshaaa@ip-address
expect"password:"
send"password "
expect"$"
send"sshbbb@ip-address "
expect"bbb@ip-address'spassword:"
send"password "
expect"$"
send"sshccc@ip-address "
expect"ccc@ip-address'spassword:"
send"password "
expect"$"
send"pwd "
interact
㈡ 如何在C語言程序中使用SSH
1、這種功能用腳本實現最好
2、最好弄成dsa公鑰驗證方式,也就是ssh無密碼登錄
3、ssh的密碼輸入是綁定到TTY而不是stdin的,所以無法重定向(到管道)
3.1、如果想通過程序輸入ssh密碼,那麼就要模擬TTY,或者讓ssh認為你的輸入是直接來自TTY
3.2、或者,你乾脆自己實現個最簡單的ssh協議吧
3.3、程序模擬TTY,一般會直接採用expact庫,這在腳本裡面很方便,但由於C處理字元串過於笨拙……
4、登錄之後,和ssh交互需要通過管道進行。用寫來模擬控制台鍵入字元,用讀來取命令輸出數據;至於命令返回值……讀 echo $? 的輸出吧
5、如果命令本身也有輸入/輸出提示,比如 rm xxx 會讓你按y什麼的,那麼你必須自己捕捉到這個提示,然後往管道寫一個"Y\n"進去。所以……也許還是expect方便。
6、你可以搞一個腳本,在腳本里用expect完成登錄動作,然後下interact命令進入交互模式;然後在C裡面用popen()執行這個腳本,這樣就可以避開登錄問題,但仍然要處理命令行交互問題(也就是回答are you sure之類的問題,當然這可以通過為命令傳入-y之類參數來繞開,不過有些命令未必支持)。
㈢ ssh是什麼
SSH:安全外殼協議
一、SSH介紹
什麼是SSH?
傳統的網路服務程序,如:ftp、pop和telnet在本質上都是不安全的,因為它們在網路上用明文傳送口令和數據, 別有用心的人非常容易就可以截 獲這些口令和數據。而且,這些服務程序的安全驗證方式也是有其弱點的, 就是很容易受到「中間人」(man-in-the-middle)這種方式的攻 擊。所謂「中間人」的攻擊方式, 就是「中間人」冒充真正的伺服器接收你的傳給伺服器的數據,然後再冒充你把數據傳給真正的伺服器。 伺服器和你之間的數 據傳送被「中間人」一轉手做了手腳之後,就會出現很嚴重的問題。
SSH的英文全稱是Secure Shell。通過使用SSH,你可以把所有傳輸的數據進行加密,這樣「中間人」這種攻擊方式就不可能實現了, 而且也能夠防止DNS和IP欺騙。還有一個 額外的好處就是傳輸的數據是經過壓縮的,所以可以加快傳輸的速度。 SSH有很多功能,它既可以代替telnet,又可以為ftp、pop、甚至ppp提 供一個安全的「通道」。
最初SSH是由芬蘭的一家公司開發的。但是因為受版權和加密演算法的限制,現在很多人都轉而使用OpenSSH。 OpenSSH是SSH的替代軟體,而且是免費的,可以預計將來會有越 來越多的人使用它而不是SSH。
SSH是由客戶端和服務端的軟體組成的,有兩個不兼容的版本分別是:1.x和2.x。 用SSH 2.x的客戶程序是不能連接到SSH 1.x的服務程序上去的。OpenSSH 2.x同時支持SSH 1.x和2.x。
SSH的安全驗證是如何工作的
從客戶端來看,SSH提供兩種級別的安全驗證。
第一種級別(基於口令的安全驗證)只要你知道自己帳號和口令,就可以登錄到遠程主機。所有傳輸的數據都會被加密, 但是不能保證你正在連接的伺服器就是你想連接的伺服器。可能會有別的伺服器在冒充真正的伺服器, 也就是受到「中間人」這種方式的攻擊。
第二種級別(基於密匙的安全驗證)需要依靠密匙,也就是你必須為自己創建一對密匙,並把公用密匙放在需要訪問的伺服器上。 如果你要連接到SSH伺服器 上,客戶端軟體就會向伺服器發出請求,請求用你的密匙進行安全驗證。伺服器收到請求之後, 先在你在該伺服器的家目錄下尋找你的公用密匙,然後把它和你發 送過來的公用密匙進行比較。如果兩個密匙一致, 伺服器就用公用密匙加密「質詢」(challenge)並把它發送給客戶端軟體。 客戶端軟體收到「質 詢」之後就可以用你的私人密匙解密再把它發送給伺服器。
用這種方式,你必須知道自己密匙的口令。但是,與第一種級別相比,第二種級別不需要在網路上傳送口令。
第二種級別不僅加密所有傳送的數據,而且「中間人」這種攻擊方式也是不可能的(因為他沒有你的私人密匙)。 但是整個登錄的過程可能需要10秒。
二、SSL介紹(Secure socket Layer & Security Socket Layer)
一個應用程序的安全需求在很大程度上依賴於將如何使用該應用程序和該應用程序將要保護什麼。不過,用現有技術實現強大的、 一般用途的安全通常是可能的。認證就是一個很好的示例。
當顧客想從 Web 站點購買某個產品時,顧客和 Web 站點都要進行認證。顧客通常是以提供名字和密碼的方式來認證他自己。 另一方面,Web 站 點通過交換一塊簽名數據和一個有效的 X.509 證書(作為 SSL 握手的一部分)來認證它自己。 顧客的瀏覽器驗證該證書並用所附的公用密鑰驗證簽 名數據。一旦雙方都認證了,則交易就可以開始了。
SSL 能用相同的機制處理伺服器認證(就如在上面的示例中)和客戶機認證。 Web 站點典型地對客戶機認證不依賴 SSL — 要求用戶提供密碼是較容易的。而 SSL 客戶機和伺服器認證對於透明認證是完美的, 對等機 — 如 p2p 應用程序中的對等機之間一定會發生透明認證。
安全套接字層(Secure Sockets Layer (SSL)) ,SSL 是一種安全協議,它為網路(例如網際網路)的通信提供私密性。SSL 使應用程序在通信時不用擔心被竊聽和篡改。 SSL 實際上 是共同工作的兩個協議:「SSL 記錄協議」(SSL Record Protocol)和「SSL 握手協議」 (SSL Handshake Protocol)。「SSL 記錄協議」是兩個協議中較低級別的協議,它為較高級別的協議, 例如 SSL 握手協議對 數據的變長的記錄進行加密和解密。SSL 握手協議處理應用程序憑證的交換和驗證。
當一個應用程序(客戶機)想和另一個應用程 序(伺服器)通信時,客戶機打開一個與伺服器相連接的套接字連接。然後, 客戶機和伺服器對安全連接進行協商。作為協商的一部分,伺服器向客戶機作自我認 證。客戶機可以選擇向伺服器作或不作自我認證。 一旦完成了認證並且建立了安全連接,則兩個應用程序就可以安全地進行通信。按照慣例,我將把發起該通信的 對等機看作客戶機, 另一個對等機則看作伺服器,不管連接之後它們充當什麼角色。
名為 A 和 B 的兩台對等機想安全地進行通 信。在我們簡單的 p2p 應用程序的環境中,對等機 A 想查詢對等機 B 上的一個資源。 每個對等機都有包含其專用密鑰的一個資料庫(名為 keystore)和包含其公用密鑰的證書。密碼保護資料庫的內容。 該資料庫還包含一個或多個來自被信任的對等機的自簽名證書。 對等機 A 發起這 項事務,每台對等機相互認證,兩台對等機協商採用的密碼及其長度並建立一個安全通道。完成這些操作之後, 每個對等機都知道它正在跟誰交談並且知道通道是 安全的。 SSL (Secure socket Layer)安全套接層協議主要是使用公開密鑰體制和X.509數字證書技術保護信息傳輸的機密性和完 整性, 它不能保證信息的不可抵賴性,主要適用於點對點之間的信息傳輸,常用Web Server方式。
安全套接層協議(SSL,Security Socket Layer)是網景(Netscape)公司提出的基於WEB應用的安全協議,它包括:伺服器認證、 客戶認證(可選)、SSL鏈路上的數據
完整性和SSL鏈路上的數據保密性。對於電子商務應用來說,使用SSL可保證信息的真實性、 完整性和保密性。但由於SSL不對應用層的消息進行數字簽 名,因此不能提供交易的不可否認性,這是SSL在電子商務中使用的最大不足。 有鑒於此,網景公司在從Communicator 4.04版開始的所有瀏 覽器中引入了一種被稱作「表單簽名(Form Signing)」的功能, 在電子商務中,可利用這一功能來對包含購買者的訂購信息和付款指令的表單進行 數字簽名,從而保證交易信息的不可否認性。綜上所述, 在電子商務中採用單一的SSL協議來保證交易的安全是不夠的,但採用"SSL+表單簽名"模式能夠 為電子商務提供較好的安全性保證。
------------------------------------------------------------------------------------------------
(SSH: Secure Shell Protocol)
安全外殼協議(SSH)是一種在不安全網路上提供安全遠程登錄及其它安全網路服務的協議。Secure Shell,又可記為S S H,最初是U N I X系統上的一個程序,後來又迅速擴展到其他操作平台。S S H是一個好的應用程序,在正確使用時,它可以彌補網路中的漏洞。除此以外, S S H之所以酷,還有以下原因:S S H客戶端適用於多種平台。幾乎所有的U N I X平台—包括H P - U X、L i n u x、A I X、S o l a r i s、Digital UNIX、I r i x、S C O,以及其他平台—都可以運行S S H。而且,已經有一些客戶端(其中有些為測試版)可以運行於U N I X操作平台以外,包括O S / 2、V M S、B e O S、J a v a、Wi n d o w s 9 5 / 9 8和Windows NT。這樣,你就可以在幾乎所有的平台上運行S S H客戶端程序了。對非商業用途它是免費的。許多S S H版本可以獲得源代碼,並且只要不用於商業目的,都可以免費得到。而且,U N I X版本也提供了源代碼,這就意味著任何人都可以對它進行修改。但是,如果你選擇它用於商業目的,那麼無論使用何種版本的S S H,你都得確認已經注冊並獲得了相應許可權。絕大多數S S H的客戶端和守護進程都有一些注冊限制。惟一的S S H通用公共注冊(General Public License,G P L )版本是l s h,它目前還是測試版。通過I n t e r n e t傳送密碼安全可靠。這是S S H被認可的優點之一。如果你考察一下接入ISP(Internet Service Provider,I n t e r n e t服務供應商)或大學的方法,一般都是採用Te l n e t或P O P郵件客戶進程。因此,每當要進入自己的賬號時,你輸入的密碼將會以明碼方式發送(即沒有保護,直接可讀),這就給攻擊者一個盜用你賬號的機會—最終你將為他的行為負責。對應用的支持。由於S S H的源代碼是公開的,所以在U N I X世界裡它獲得了廣泛的認可。L i n u x,其源代碼也是公開的,大眾可以免費獲得,並同時獲得了類似的認可。這就使得所有開發者(或任何人)都可以通過補丁程序或b u g修補來提高其性能,甚至還可以增加功能。這也第一部分獲得並安裝S S H意味著其性能可以不斷得到提高而無須得到來自原始創作者的直接技術支持。S S H替代了不安全的遠程應用程序。S S H是設計用來替代伯克利版本的r命令集的;它同時繼承了類似的語法。其結果是,使用者注意不到使用S S H和r命令集的區別。利用它,你還可以干一些很酷的事。通過使用S S H,你在不安全的網路中發送信息時不必擔心會被監聽。你也可以使用P O P通道和Te l n e t方式,通過S S H可以利用P P P通道創建一個虛擬個人網路( Virtual Private Network, V P N )。S S H也支持一些其他的身份認證方法,如K e r b e r o s和安全I D卡等。
但是因為受版權和加密演算法的限制,現在很多人都轉而使用OpenSSH。 OpenSSH是SSH的替代軟體,而且是免費的,可以預計將來會有越 來越多的人使用它而不是SSH。
SSH是由客戶端和服務端的軟體組成的,有兩個不兼容的版本分別是:1.x和2.x。 用SSH 2.x的客戶程序是不能連接到SSH 1.x的服務程序上去的。OpenSSH 2.x同時支持SSH 1.x和2.x。
SSH 主要有三部分組成:
傳輸層協議 [SSH-TRANS] 提供了伺服器認證,保密性及完整性。此外它有時還提供壓縮功能。 SSH-TRANS 通常運行在 TCP/IP連接上,也可能用於其它可靠數據流上。 SSH-TRANS 提供了強力的加密技術、密碼主機認證及完整性保護。該協議中的認證基於主機,並且該協議不執行用戶認證。更高層的用戶認證協議可以設計為在此協議之上。
用戶認證協議 [SSH-USERAUTH] 用於向伺服器提供客戶端用戶鑒別功能。它運行在傳輸層協議 SSH-TRANS 上面。當 SSH-USERAUTH 開始後,它從低層協議那裡接收會話標識符(從第一次密鑰交換中的交換哈希 H )。會話標識符唯一標識此會話並且適用於標記以證明私鑰的所有權。 SSH-USERAUTH 也需要知道低層協議是否提供保密性保護。
連接協議 [SSH-CONNECT] 將多個加密隧道分成邏輯通道。它運行在用戶認證協議上。它提供了互動式登錄話路、遠程命令執行、轉發 TCP/IP 連接和轉發 X11 連接。
一旦建立一個安全傳輸層連接,客戶機就發送一個服務請求。當用戶認證完成之後,會發送第二個服務請求。這樣就允許新定義的協議可以與上述協議共存。連接協議提供了用途廣泛的各種通道,有標準的方法用於建立安全互動式會話外殼和轉發(「隧道技術」)專有 TCP/IP 埠和 X11 連接。
通過使用SSH,你可以把所有傳輸的數據進行加密,這樣"中間人"這種攻擊方式就不可能實現了,而且也能夠防止DNS欺騙和IP欺騙。使用SSH,還有一個額外的好處就是傳輸的數據是經過壓縮的,所以可以加快傳輸的速度。SSH有很多功能,它既可以代替Telnet,又可以為FTP、PoP、甚至為PPP提供一個安全的"通道"。
SSH分為兩部分:客戶端部分和服務端部分。
服務端是一個守護進程(demon),他在後台運行並響應來自客戶端的連接請求。服務端一般是sshd進程,提供了對遠程連接的處理,一般包括公共密鑰認證、密鑰交換、對稱密鑰加密和非安全連接。
客戶端包含ssh程序以及像scp(遠程拷貝)、slogin(遠程登陸)、sftp(安全文件傳輸)等其他的應用程序。
他們的工作機制大致是本地的客戶端發送一個連接請求到遠程的服務端,服務端檢查申請的包和IP地址再發送密鑰給SSH的客戶端,本地再將密鑰發回給服務端,自此連接建立。剛才所講的只是SSH連接的大致過程,SSH 1.x和SSH 2.x在連接協議上還有著一些差異。
SSH被設計成為工作於自己的基礎之上而不利用超級伺服器(inetd),雖然可以通過inetd上的tcpd來運行SSH進程,但是這完全沒有必要。啟動SSH伺服器後,sshd運行起來並在默認的22埠進行監聽(你可以用 # ps -waux | grep sshd 來查看sshd是否已經被正確的運行了)如果不是通過inetd啟動的SSH,那麼SSH就將一直等待連接請求。當請求到來的時候SSH守護進程會產生一個子進程,該子進程進行這次的連接處理。
SSH:新的MVC軟體開發模式, SSH(Struts,Spring,Hibernate) Struts進行流程式控制制,Spring進行業務流轉,Hibernate進行資料庫操作的封裝,這種新的開發模式讓我們的開發更加方便、快捷、思路清晰!
㈣ C語言編寫LINUX自動登陸程序
自己寫個登錄管理器就行了。
不過很多圖形登錄管理器都支持自動登錄。
字元界面我記得是修改 initrd ,把運行那個登錄程序的命令換成直接啟動命令解釋器就行了。
㈤ C語言如何用vs2010 編寫完代碼如何測試,運行 sshish
我知道最好的是脫敏第一名牌網
㈥ linux下用用C語言實現遠程登錄
socket程序。
㈦ java web採用ssh框架,怎麼載入C語言dll
public class TestDLL {
static {
System.loadLibrary("dllFileName"); // 載入dll
}
public native static void test(); // 這是dll中的方法
public static void main(String[] args) {
test(); // 調用dll中的方法
}
}