全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:6600
推到 Plurk!
推到 Facebook!

請問有人會寫 SFTP (SSH) Client 程式嗎? 可否幫忙檢查錯誤

缺席
pcboy
版主


發表:177
回覆:1838
積分:1463
註冊:2004-01-13

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-07-27 17:07:34 IP:61.220.xxx.xxx 訂閱
請問有人會寫 SFTP (SSH) 程式嗎? 可否幫忙檢查錯誤
程式執行到 FTP.Client 就不會往下執行, 也沒有跳出錯誤訊息
<textarea class="delphi" rows="10" cols="60" name="code">procedure TForm1.Button1Click(Sender: TObject); var User, Passwd, Host, Port: String; Result : Boolean; SSL : TIdSSLIOHandlerSocketOpenSSL; E:Exception; i: integer; //function FtpAccess.ConnectToSFTPServer(User, Passwd, Host, Port: String): boolean; begin // 帳號密碼沒錯, 用 putty.exe 可以連上 User:='root'; Passwd:='password'; Host:='192.168.128.128'; Port:='22'; Result:= False ; SSL:= TIdSSLIOHandlerSocketOpenSSL.Create(FTP); SSL.ReadTimeout := 60000; SSL.SSLOptions.Method := sslvSSLv23; SSL.SSLOptions.Mode := sslmClient; FTP:= TIdFTP.Create(nil); FTP.AutoLogin:= True; FTP.IOHandler := SSL ; FTP.AutoLogin := True; FTP.Passive := True; FTP.UseTLS := utUseExplicitTLS; FTP.AUTHCmd := tAuthSSL; // FTP.DataPortProtection:= ftpdpsPrivate ; // Undeclared identifier: 'ftpdpsPrivate' FTP.Username:= USER; FTP.Password:= Passwd; FTP.Host:= HOST; FTP.Port:= StrToInt(Port) ; FTP.Disconnect ; Try FTP.Connect ; // 錯誤, 此步執行不完 for i:=0 to FTP.ListResult.Count-1 do Memo1.Lines.Add(FTP.ListResult[i]); Result:= True ; Except on E:Exception do Begin // MyDataModule.AddToFtpLog('ERROR Func ConnectToSFTPServer', E.Message); // MyDataModule.Log('ERROR Func ConnectToSFTPServer',E.className ' ' E.Message); end ; End ; end; </textarea>
------
能力不足,求助於人;有能力時,幫幫別人;如果您滿意答覆,請適時結案!

子曰:問有三種,不懂則問,雖懂有疑則問,雖懂而想知更多則問!
編輯記錄
pcboy 重新編輯於 2007-07-27 17:56:51, 註解 無‧
Stallion
版主


發表:52
回覆:1600
積分:1995
註冊:2004-09-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-07-27 18:14:35 IP:211.22.xxx.xxx 未訂閱
報告pcboy大,Client與Server連線要花點時間,你可能要把Connet「連線」的方法先建立起來再去取得資訊。看看暗黑大之前的討論內容。
http://delphi.ktop.com.tw/board.php?cid=168&fid=920&tid=89524
pcboy
版主


發表:177
回覆:1838
積分:1463
註冊:2004-01-13

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-07-27 19:12:42 IP:203.204.xxx.xxx 訂閱
> 把Connet「連線」的方法先建立起來 ?
還需要其他程式碼 ? (這是網路的程式拿來改的)
Server 是這台電腦 VMware 上的 Linux, 不是LAN或Internet的別台電腦
用 putty.exe 是馬上就連上了, 這個程式也應該慢不了多少吧
------
能力不足,求助於人;有能力時,幫幫別人;如果您滿意答覆,請適時結案!

子曰:問有三種,不懂則問,雖懂有疑則問,雖懂而想知更多則問!
Stallion
版主


發表:52
回覆:1600
積分:1995
註冊:2004-09-15

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-07-27 19:37:12 IP:211.22.xxx.xxx 未訂閱
其實我除了看了暗黑大之前的說明外,我自己也實作過類似多人聊天室的程式,我的經驗是:如果Client socket在Open後立即執行Socket通信是不行的!必須延遲一段時間(我的經驗是100ms-500ms)等待tree way hand shake完成後再進行是比較妥善的作法。
===================引 用 pcboy 文 章===================
> 把Connet「連線」的方法先建立起來 ?
還需要其他程式碼 ? (這是網路的程式拿來改的)
Server 是這台電腦 VMware 上的 Linux, 不是LAN或Internet的別台電腦
用 putty.exe 是馬上就連上了, 這個程式也應該慢不了多少吧
暗黑破壞神
版主


發表:9
回覆:2301
積分:1627
註冊:2004-10-04

發送簡訊給我
#5 引用回覆 回覆 發表時間:2007-07-27 19:44:18 IP:61.225.xxx.xxx 未訂閱
呵。其實。你可以看到 sftp 在 putty 的那個網站就有人寫好了。
而它是一個 command line 的動作。
今天如果是我要寫這個部份。我會把原來的main()
改成 sftp() 的函數。當然這部份必須花些時間去修改。
我不會想把這個部份用元件處理。
更進一步的話,我也會想乾脆把它變成另一個 thread 來處理。
讓它變為你程式的一部份的方法是這樣。
而不是再去用元件做這個事。

以上是我如果遇到客戶會要我加上 sftp 的做法。
pcboy
版主


發表:177
回覆:1838
積分:1463
註冊:2004-01-13

發送簡訊給我
#6 引用回覆 回覆 發表時間:2007-07-30 14:44:10 IP:61.220.xxx.xxx 訂閱
To : Stallion 兄
我是參考這兩篇的程式做的, 似乎原來寫的人也是因為無法執行而提出問題
http://www.delphifr.com/infomsg_ERREUR-VERIFICATION-ETENDUE_829137.aspx
http://www.developpez.net/forums/archive/index.php/t-224192.html

我剛剛又測試一次, 等了 5 分鐘, 仍是沒有連上
------
能力不足,求助於人;有能力時,幫幫別人;如果您滿意答覆,請適時結案!

子曰:問有三種,不懂則問,雖懂有疑則問,雖懂而想知更多則問!
Stallion
版主


發表:52
回覆:1600
積分:1995
註冊:2004-09-15

發送簡訊給我
#7 引用回覆 回覆 發表時間:2007-07-30 14:56:09 IP:211.22.xxx.xxx 未訂閱
FTP data port=20 control port=21,你為何訂在22,是 FTP Server service port 故意訂在那裡嗎?
pcboy
版主


發表:177
回覆:1838
積分:1463
註冊:2004-01-13

發送簡訊給我
#8 引用回覆 回覆 發表時間:2007-07-30 15:37:56 IP:61.220.xxx.xxx 訂閱
SFTP 走 22  , FTP 走 21
你執行一下 WinSCP , 它也使用的是 22 啊
http://winscp.sourceforge.net/eng/index.php
------
能力不足,求助於人;有能力時,幫幫別人;如果您滿意答覆,請適時結案!

子曰:問有三種,不懂則問,雖懂有疑則問,雖懂而想知更多則問!
暗黑破壞神
版主


發表:9
回覆:2301
積分:1627
註冊:2004-10-04

發送簡訊給我
#9 引用回覆 回覆 發表時間:2007-07-30 15:40:49 IP:218.170.xxx.xxx 未訂閱
ssh, sftp....都走 port 22
預設值。當然你可以改變它。
orson
中階會員


發表:5
回覆:135
積分:58
註冊:2002-07-11

發送簡訊給我
#10 引用回覆 回覆 發表時間:2007-08-01 09:32:25 IP:220.130.xxx.xxx 未訂閱
SFTP 並不等同於 FTP over SSH 
他是一個完全不同的規格
Indy的FTP 並不支援它
SFTP的協定定義是 IETF draft-ietf-secsh-filexfer
IdFTP 支援的協定是
RFC 959 - File Transfer Protocol [FTP]
RFC 2228 - FTP Security Extensions
RFC 2389 - Feature negotiation mechanism for the File Transfer Protocol
RFC 2428 - FTP Extensions for IPv6 and NATs
RFC 2640 - FTP Internalization
IETF Draft Extensions to FTP
Deflate transmission mode for FTP
Securing FTP with TLS

---
順帶一提 您所寫的code 應該可以連上FTP over SSL/TLS
pcboy
版主


發表:177
回覆:1838
積分:1463
註冊:2004-01-13

發送簡訊給我
#11 引用回覆 回覆 發表時間:2007-08-01 10:33:31 IP:61.220.xxx.xxx 訂閱
傷腦筋, 再執行 WinSCP 看了一下, 它支援 3 種協定
SFTP
SFTP (allow SCP fallback) (預設這種)
SCP

如果 IdFTP 不支援, 那就要用 WinSock 來寫了嗎 ? (或還有什麼辦法?)
可以提供範例 or 幾個一定會用到的 API 當 Google 搜尋關鍵字嗎 ?
(小弟應該會先用 delphi SFTP winsock 或 wininet 去搜尋吧)

------
能力不足,求助於人;有能力時,幫幫別人;如果您滿意答覆,請適時結案!

子曰:問有三種,不懂則問,雖懂有疑則問,雖懂而想知更多則問!
orson
中階會員


發表:5
回覆:135
積分:58
註冊:2002-07-11

發送簡訊給我
#12 引用回覆 回覆 發表時間:2007-08-01 22:44:44 IP:61.221.xxx.xxx 未訂閱
您要不要學學FileZilla
直接呼叫putty的sftp command line tool
http://filezilla.sf.net
暗黑破壞神
版主


發表:9
回覆:2301
積分:1627
註冊:2004-10-04

發送簡訊給我
#13 引用回覆 回覆 發表時間:2007-08-01 22:52:51 IP:220.131.xxx.xxx 未訂閱
咦。對了。我記得還有一種方式。
它是利用 PC 這邊的一個 ssh 建立連線到 server 端。
而你的應用程式跟你 local ssh 做連線。
也就是說由那個 ssh client 幫你做成一個通道。
而你的程式不必自己去實現 ssh 的加解密。
也許這樣你會比較簡單。
只是給客戶時,必須要有那個 ssh client 的版權。。。。。etc
Coffee
版主


發表:31
回覆:878
積分:561
註冊:2006-11-15

發送簡訊給我
#14 引用回覆 回覆 發表時間:2007-08-01 23:04:03 IP:203.73.xxx.xxx 訂閱
這是所謂的ssh tunnel吧?
在putty上也有,我拿來連過vnc

===================引 用 暗黑破壞神 文 章===================
咦。對了。我記得還有一種方式。
它是利用 PC 這邊的一個 ssh 建立連線到 server 端。
而你的應用程式跟你 local ssh 做連線。
也就是說由那個 ssh client 幫你做成一個通道。
而你的程式不必自己去實現 ssh 的加解密。
也許這樣你會比較簡單。
只是給客戶時,必須要有那個 ssh client 的版權。。。。。etc
------
不論是否我發的文,在能力範圍皆很樂意為大家回答問題。
為了補我的能力不足之處,以及讓答案可以被重複的使用,希望大家能儘量以公開的方式問問題。
在引述到我的文時自然會儘量替各位想辦法,謝謝大家!
系統時間:2024-04-19 21:34:51
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!