㈠ 我從UNIX上SFTP到windows,取了一個txt文件(用C#寫的),發現多了很多空行。 但是sftp又不能設置傳輸模式
很正確,不要加擴展名,然後就可以了。
㈡ PUTTY 使用SSH接入伺服器,但是不知道upload TXT文件的存儲路徑是什麼,。求高人指點TXT文件的存儲路徑。
PuTTY 提供了兩個文件傳輸工具
PSCP (PuTTY Secure Copy client)
PSFTP (PuTTY SFTP client)
PSCP 通過 SSH 連接,在兩台機器之間安全的傳輸文件,可以用於任何 SSH(包括 SSH v1、SSH v2) 伺服器。
PSFTP 則是 SSH-2 中新增的特性,使用的是新的 SFTP 協議,使用上與傳統的 FTP 類似。事實上 PSCP 如果發現 SFTP 可用,PSCP就會使用 SFTP 協議來傳輸文件,否則還是 SCP 協議。PSFTP 與 PSCP 相比,PSFTP 的優點是可以與伺服器進行交互,遍歷伺服器上的文件系統,在一個會話中上傳或下載多個文件。而 PSCP 只能一次傳輸一個文件,傳輸完畢後立刻終止會話。
PSCP 的使用
在控制台直接執行 pscp 可以看到幫助
C:\>pscp
PuTTY Secure Copy client
Release 0.58
Usage: pscp [options] [user@]host:source target
pscp [options] source [source...] [user@]host:target
pscp [options] -ls [user@]host:filespec
Options:
-V print version information and exit
-pgpfp print PGP key fingerprints and exit
-p preserve file attributes
-q quiet, don't show statistics
-r directories recursively
-v show verbose messages
-load sessname Load settings from saved session
-P port connect to specified port
-l user connect with specified username
-pw passw login with specified password
-1 -2 force use of particular SSH protocol version
-4 -6 force use of IPv4 or IPv6
-C enable compression
-i key private key file for authentication
-batch disable all interactive prompts
-unsafe allow server-side wildcards (DANGEROUS)
-sftp force use of SFTP protocol
-scp force use of SCP protocol
C:\>
可以看出 PSCP 的使用是很簡單的,把常用的幾個選項說一下:
-q 安靜模式,傳輸文件時什麼也不顯示,否則會顯示出文件的傳輸進度,默認是關閉的
-P port 指定伺服器的 SSH 埠,注意這個是大寫字母 P,默認是 -P 22,如果主機的 SSH 埠就是 22,就不用指定了
-l user 指定以哪個用戶的身份登錄主機,如果沒有指定,則 PSCP 會在 PuTTY 保存的同名 Session 中獲得默認的用戶名稱。用戶名稱也可以和主機名稱寫在一起,用 @ 分割開,比如:username@server
-pw passwd 指定登錄時所用的口令為 passwd
-i keyfile 就是指定登錄時所用的密鑰文件
最後面指定的主機名也可以是 PuTTY 中保存的 Session 名稱。比如我們在 PuTTY 中保存了一個名為 foobarserver 的會話,而我們所在的網路又的確沒有名為 foobarserver 的主機名稱。而在這個 foobarserver 會話中保存的主機名稱是 demo-server,保存的自動登錄的用戶是 taylor。那麼用命令
pscp c:\autoexec.bat foobarserver:backup/
就把本地的 c:\autoexec.bat 復制到了主機 demo-server 上的用戶 taylor 所在的主目錄下的 backup 子目錄中(這個路徑可能是 /home/taylor/backup
所以 PSCP 大致用法的例子就是:
pscp -P 22 -i c:\path\your-private-key.ppk -C username@server:/remote/path/
下面還是用一些實例來說明會比較簡單一些:
把本地的 C:\path\foo.txt 復制到遠程主機 192.168.6.200 的 /tmp 目錄下
pscp c:\path\foo.txt 192.168.6.200:/tmp
把本地的 C:\path\foo.txt 復制到主機 192.168.6.200 的 /tmp 目錄下,但是以主機上的用戶 taylor 的許可權執行
pscp c:\path\foo.txt [email protected]:/tmp
或者是
pscp -l taylor c:\path\foo.txt 192.168.6.200:/tmp
把本地的 C:\path\foo.txt 傳送到主機 192.168.6.200 的 /tmp 目錄下,但是主機的 SSH 埠是 3122
pscp -P 3122 c:\path\foo.txt 192.168.6.200:/tmp
把本地的 C:\path\foo.txt 復制到主機 192.168.6.200 的用戶 taylor 的主目錄下
pscp c:\path\foo.txt [email protected]:.
把主機 192.168.6.200 上的用戶 taylor 主目錄下的所有 *.tgz 文件拷貝到本地的 c:\backup 目錄中,如果 SSH 版本是 SSH v1,那這個命令就會出錯。
pscp [email protected]:*.tgz c:\backup
再來看看 PSFTP
在控制台執行命令 psftp -h,可以得到 psftp 的幫助
C:\>psftp -h
PuTTY Secure File Transfer (SFTP) client
Release 0.58
Usage: psftp [options] [user@]host
Options:
-V print version information and exit
-pgpfp print PGP key fingerprints and exit
-b file use specified batchfile
-bc output batchfile commands
-be don't stop batchfile processing if errors
-v show verbose messages
-load sessname Load settings from saved session
-l user connect with specified username
-P port connect to specified port
-pw passw login with specified password
-1 -2 force use of particular SSH protocol version
-4 -6 force use of IPv4 or IPv6
-C enable compression
-i key private key file for authentication
-batch disable all interactive prompts
C:\>
用法與 PSCP 大同小異,雖然有個 -load 選項,其實這個沒啥用,後面用主機名的時候,與 PSCP 一樣直接用上會話名稱就可以了。
用 PSFTP 登錄到伺服器上以後,操作與 FTP 差不多,這里簡單的說一下吧:
open 登錄主機
open [username@]<sessname|hostname|ip> [port]
比如:
open taylor@demo-server 3022
就是以用戶 taylor 的身份,登陸到主機 demo-server 上,SSH 埠是 3022
open demo-server
登陸 demo-server,這里的 demo-server 可以是PuTTY 中已經保存的會話名稱,也可以是主機的名稱,如果主機名稱與會話名稱相同,以會話名稱為准。
close 關閉 SFTP 連接
這個沒啥說的,close 就關閉了 SFTP 連接
quit 結束本次的 SFTP 會話
也沒啥用法,就是關閉了 PSFTP 這個程序
help [command] 幫助
直接打 help 就可以看到幫助指令,後面指定上 一個命令就可以查看該命令的幫助,比如: help open
cd [directory] 改變當前目錄
pwd 察看當前目錄
lcd [directory] 改變本地目錄
lpwd 察看本地當前目錄
get [-r] <filename|directory> 從伺服器下載一個文件/目錄,這個命令不能用通配符,參數 -r 可以遞歸下載整個目錄
put [-r] <filename|directory> [dest] 把文件/目錄上傳到伺服器,這個命令不能用通配符,參數 -r 可以遞歸上傳整個目錄
mget [-r] <filename|directory> 從伺服器下載一批文件/目錄,可以用通配符,-r 的含義與 get 一樣
mget [-r] <filename|directory> [dest] 把一批文件/目錄上傳到伺服器,可以用通配符,-r 的含義與 put 一樣
reget [-r] <filename|directory> 從伺服器續傳下載一個文件/目錄,這個命令不能用通配符,-r 的含義與 get 一樣
reput [-r] <filename|directory> [dest] 把一批文件/目錄續傳上傳到伺服器,這個命令不能用通配符,-r 的含義與 put 一樣
dir [directory] 列目錄
ls 和 dir 一樣
chmod [file|directory] 改變文件的許可權,與 Unix 的 chmod 命令類似
del <filename> 刪除文件,要注意的是 del 只能刪除文件
rm 與 del 一樣
mkdir <new-directory-name> 創建一個目錄
rmdir <directory> 刪除一個空目錄,只有空目錄才可以被刪除
mv <source-file|source-directory> <dest-file|dest-directory> 改名/移動。如果源和目的都是文件或目錄,則是改名。如果目的是目錄的話,則是移動。
! 在本地命令前加一個感嘆號,就可以直接執行
㈢ JAVA_JSCH如何遠程操作SFTP伺服器上的文件
使用SSH協議進行FTP傳輸的協議叫SFTP
換言之你的SSH協議一定啟用了,那麼使用基版本linux命令在遠端執行即可。權
我個人而言,JSCH一般是這樣用的:SFTP用於單純的文件上傳,之後直接使用基礎ssh協議執行遠端linux命令(比如說,移動文件或是重啟伺服器等等)
至於API的具體使用方式,稍微搜索一下很容易找到,比如這個:
http://blog.csdn.net/allen_zhao_2012/article/details/7941631
㈣ sftp 上傳下載文件的時候 sh.GetFileList("/PF/Upload/", "test.txt"); 提示未將對象引用到實例。
我也遇到過 你應該檢查下你的值是不是為null,跟蹤調試下看看呢,雖然我對這個不太懂 給一點我的想法吧
㈤ 如何寫一個shell腳本用sftp上傳文件
主要步驟如下:1.為運行shell腳本的本地用戶生成密鑰對
2.將其中的公鑰分發到sftp欲登錄的遠程伺服器上
3.編寫並以上面的本地用戶運行shell腳本
一.生成密鑰對
在shell腳本中使用sftp時必須用到密鑰對(公鑰和私鑰).可使用下列方式生成(SSH 2.X版本),這里本地用戶記為:local_user:
$ ssh-keygen -dsa
屏幕提示:
Generating public/private dsa key pair.
Enter file in which to save the key (/home/local_user/.ssh/id_dsa):
# 按回車保存為: /home/local_user/.ssh/id_dsa,即當前用戶local_user的私鑰
Enter passphrase (empty for no passphrase):
# 按回車,表示讀取密鑰時不需要密鑰的密碼
Enter same passphrase again:
# 確認密鑰的密碼,必須和上面的輸入相同
Your identification has been saved in /home/local_user/.ssh/id_dsa.
# 私鑰保存信息
Your public key has been saved in /home/local_user/.ssh/id_dsa.pub.
# 公鑰保存信息
The key fingerprint is:
ec:41:e8:08:38:0b:f8:1e:bc:92:98:32:fc:d7:69:7d ...
# 密鑰指紋
二.分發公鑰
為了使用密鑰,必須將公鑰分發到欲登錄的遠程伺服器上,這里遠程伺服器記為remote_host,欲登錄的遠程用戶記為remote_user
1.公鑰到欲登錄的遠程伺服器的遠程用戶的家目錄下,例如:
id_dsa.pub到remote_host:/home/remote_user/.ssh/
若目錄/home/remote_user/.ssh/不存在,請先創建之.
2.將來的公鑰文件改名為authorized_keys
3.修改公鑰文件的訪問許可權
chmod 644 authorized_keys
三.示例
目標:
從遠程伺服器remote_host:/home/remote_user/data/
傳送下列文件到本地計算機的當前目錄: /home/local_user/data/:
20050201
20050202
20050203
20050204
20050205
方式1: 批模式
sftp提供了一個選項-b,用於集中存放sftp命令(該選項主要用於非交互模式的sftp).因此對於上面的目標,可以生成如下的命令文件:
cd /home/remote_user/data/
lcd /home/local_user/data/
-get 20050201 .
-get 20050202 .
-get 20050203 .
-get 20050204 .
-get 20050205 .
quit
這里存為: sftp_cmds.txt
說明: get命令前加一個"-"以防止其執行錯誤時sftp執行過程被終止.
以下為腳本示例:
#!/bin/sh
sftp -b ./sftp_cmds.txt remote_user@remote_host
方式二:
#!/bin/sh
sftp remote_user@remote_host << EOF
cd /home/remote_user/data/
lcd /home/local_user/data/
-get 20050201 .
-get 20050202 .
-get 20050203 .
-get 20050204 .
-get 20050205 .
quit
EOF