什麼是sftp及命令使用和搭建測試

SFTP(SSH File Transfer Protocol,也稱 Secret File Transfer Protocol)

是一種安全的文件傳輸協議,一種通過網絡傳輸文件的安全方法;

它確保使用私有和安全的數據流來安全地傳輸數據。

SFTP要求客戶端用戶必須由服務器進行身份驗證,

並且數據傳輸必須通過安全通道(SSH)進行,即不傳輸明文密碼或文件數據。SFTP 為 SSH的一部份,和vsftpd沒有一點關系。

SFTP允許從暫停傳輸,目錄列表和遠程文件刪除等操作中恢復。

安全外殼協議(Secure Shell,簡稱SSH)是一種在不安全網絡上用於安全遠程登錄和其他安全網絡服務的協議。

SSH由IETF的網絡小組(Network Working Group)所制定;SSH 為建立在應用層基礎上的安全協議。SSH 是較可靠,專為遠程登錄會話和其他網絡服務提供安全性的協議。利用 SSH 協議可以有效防止遠程管理過程中的信息泄露問題。SSH最初是UNIX系統上的一個程序,後來又迅速擴展到其他操作平臺。SSH在正確使用時可彌補網絡中的漏洞。SSH客戶端適用於多種平臺。幾乎所有UNIX平臺—包括HP-UX、Linux、AIX、Solaris、Digital UNIX、Irix,以及其他平臺,都可運行SSH。

SFTP和FTP之間的區別:

1、安全通道

FTP 不提供任何安全通道來在主機之間傳輸文件;

SFTP協議提供瞭一個安全通道,用於在網絡上的主機之間傳輸文件。

2、使用的協議

FTP使用 TCP/IP協議。

SFTP是SSH協議的一部分,它是一種遠程登錄信息。

3、鏈接方式

FTP使用TCP端口21上的控制連接建立連接。

SFTP是在客戶端和服務器之間通過SSH協議(TCP端口22)建立的安全連接來傳輸文件。

4、安全性

FTP密碼和數據以純文本格式發送,大多數情況下是不加密的,安全性不高。

SFTP會在發送之前加密數據,二進制的形式傳遞,是無法 "按原樣" 閱讀的,安全性較高。

sftp連接登錄

1.秘鑰文件方式登錄

sftp -oIdentityFile=/opt/sftpkey/mysftp -oPort=22 mysftp@IP 秘鑰文件放在/opt/sftpkey/下,文件名稱是mysftp密鑰文件在 linux上 ,要將權限改為400 方可使用chmod 400 mysftp

sftp -P 22 -i ~/.ssh/id_rsa zp@192.168.0.99

2.賬號密碼方式登錄

sftp -oPort=22 mysftp@IP

sftp -P remote_port user_name@remote_server_address[:path]

連接成功後將進入一個 SFTP 的解釋器,可以發現命令行提示符變成瞭 sftp>,使用 exit 命令可以退出連接。

如果連接地址存在 path 並且 path 不是一個目錄,那麼 SFTP 會直接從服務器端取回這個文件。

port默認為22,可省略。

連接參數

-B: buffer_size,制定傳輸 buffer 的大小,更大的 buffer 會消耗更多的內存,默認為 32768 bytes;

-P: port,制定連接的端口號;

-R: num_requests,制定一次連接的請求數,可以略微提升傳輸速度,但是會增加內存的使用量。

-o ssh_option

-i identity_file

-D sftp_server_path

常用命令

sftp> help, sftp> pwd ,sftp> ls -la , sftp> cd testDirectory ,sftp> mkdir anotherDirectory , rename /test.txt /abc.txt,rm abc.txt,rmdir abc,clear,bye、exit、quit、!

以上的命令都是用來操作遠程服務器的,如果想要操作本地目錄呢?隻需要在每個命令前添加 l即可:lcd lpwd lmkdir lumask

使用 ! 可以直接(本地)運行 Shell 中的指令: !df -h

從遠程服務器拉取文件

使用 get 命令可以從遠程服務器拉取文件到本地:

sftp> get remoteFile [newName]

如果不指定 newName,將使用和遠程服務器相同的文件名。另reget [-fPpRr] remote [local] Resume download file ,reput [-fPpRr] [local] remote Resume upload file。

#把sftp服務器上test.txt文件下載到本地get /tmp/test.txt ~/

#把sftp服務器上test目錄下載到本地

get -r /tmp/test/ ~/

使用 -r 參數可以拉取整個目錄:

sftp> get -r remoteDirectory

同樣的,可以使用 -r 參數來上傳整個目錄,但是有一點要註意,如果服務器上不存在這個目錄需要首先新建:

sftp> mkdir folderName sftp> put -r folderName

查看遠程服務器目錄內容ls 查看本地目錄內容 lls 執行本地 Shell 命令![command]

免密訪問

讓A服務器通過SSH和sftp訪問B服務器不需要輸入密碼

# ssh-keygen -t rsa ssh與-keygen之間沒有空格符

id 文件將在用戶主目錄/home/username/ .ssh目錄中生成兩個以id_rsa開頭的文件,id_rsa是私鑰,id_rsa.pub 是公鑰。windows放到C:UsersAdministrator.ssh文件夾下。

拷貝rsa公鑰到遠程服務器(B服務器)put id_rsa.pub,如果 .ssh 目錄不存在則mkdir .ssh/

重命名id_rsa.pub為authorized_keys

ssh -V找出ssh版本SSH協議1.3和1.5使用文件名作為authorized_keys,SSH協議2.0使用文件名作為authorized_keys2,如果authorized_keys文件已存在,則使用新的文件覆蓋它。使用cat以及mv命令來重命名文件。

#cat id_rsa.pub >> authorized_keys。

改變目錄和key文件的權限

#chmod 600 authorized_keys

sftp搭建 方式1

直接在系統上新建用戶

1.添加sftp用戶

adduser user1

passwd user1

usermod -s /bin/false user1

usermod -d /data/wwwroot/user1/ user1

2.修改sftp配置

vi /etc/ssh/sshd_config

##找到 Subsystem sftp 這一行,修改成:

Subsystem sftp internal-sftp

UsePAM yes

Match user user1

ForceCommand internal-sftp

ChrootDirectory /data/wwwroot/user1/

##多個用戶請重復配置這三行:

Match user user2

ForceCommand internal-sftp

ChrootDirectory /data/wwwroot/user2/

3.設置sftp用戶目錄和權限

mkdir /data/wwwroot/user1/upload

chown -R sftpuser1:root /data/wwwroot/user1/upload

chmod -R 755 /data

chmod -R 775 /data/wwwroot/user1/upload

4.啟動ssh服務

service sshd restart ##重啟ssh服務

或者/etc/init.d/sshd restart

或者

kill -9 `ps -ef| grep "/usr/sbin/sshd -D" | awk '{print $2}'` >/dev/null 2>&1

/usr/sbin/sshd -D &

給sftp新用戶的傢目錄的權限設定需註意:

1、由 ChrootDirectory 指定的目錄開始一直往上到系統根目錄為止的目錄擁有者都隻能是 root

2、由 ChrootDirectory 指定的目錄開始一直往上到系統根目錄為止都不可以具有群組寫入權限(最大權限 755),權限不能超過755。

3.如果需要添加管理員用戶,可以設置ChrootDirectory目錄屬組為sftp,然後把所有的用戶和管理員用戶屬組均改為sftp。

或者通過軟鏈接實現:

ln -s /sftp/wwwroot /sftp/wwwroot/admin

password=`mkpasswd admin`;useradd -b /sftp/admin admin;echo "admin:$password" | chpasswd;echo $password

SFTP搭建 方式2

標準搭建

##在沒有ssh的鏡像或者系統中;以及通過用戶組方式控制sftp用戶登陸;

1.ssh安裝配置

yum install -y curl tar unzip which sudo initscripts openssh-server openssh-clients rsync

yum install -y libaio.so.1* ll* vim*

yum update -y libselinux

echo 'root'| passwd –stdin root

ssh-keygen -q -N "" -t dsa -f /etc/ssh/ssh_host_dsa_key

ssh-keygen -q -N "" -t rsa -f /etc/ssh/ssh_host_rsa_key

ssh-keygen -q -N "" -t rsa -f /root/.ssh/id_rsa

ssh-keygen -q -N "" -t rsa -f /etc/ssh/ssh_host_ecdsa_key

ssh-keygen -q -N "" -t rsa -f /etc/ssh/ssh_host_ed25519_key

cp /root/.ssh/id_rsa.pub /root/.ssh/authorized_keys

sed -i "/^[^#]*UsePAM/ s/.*/#&/" /etc/ssh/sshd_config

echo "Port=39535" >> /etc/ssh/sshd_config

###添加sftp用戶

groupadd sftp

cat /etc/group

mkdir -p /data/sftp

useradd -d /data/sftp/mysftp -s /bin/false -g sftp mysftp

rm -rf /data/sftp/mysftp/.bash*

echo mysftp |passwd –stdin mysftp

##編輯sftp配置

vi /etc/ssh/sshd_config

##先註釋下面一行,

# Subsystem sftp /usr/libexec/openssh/sftp-server

##然後添加以下配置:

Subsystem sftp internal-sftp

Match Group sftp

ChrootDirectory /data/sftp/%u

ForceCommand internal-sftp

AllowTcpForwarding no

X11Forwarding no

備註:

# 註釋掉該行

# Subsystem sftp /usr/lib/openssh/sftp-server

# 使用系統默認的sftp服務

Subsystem sftp internal-sftp

# 匹配組名 sftp

Match Group sftp

# 指定活動目錄

ChrootDirectory /data/sftp/%u

# 由ChrootDirectory指定的目錄開始一直往上到系統根目錄的目錄屬主都是root.

# 由ChrootDirectory指定的目錄開始一直往上到系統根目錄都不可以具有群組寫入權限.

# 禁用端口轉發

AllowTcpForwarding no

X11Forwarding no

# 強制執行內部SFTP,並忽略任何~/.ssh/rc中的命令

ForceCommand internal-sftp

##設置Chroot目錄權限

chown root:sftp /data

chown root:sftp /data/sftp

chown root:sftp /data/sftp/mysftp

chmod 755 /data/sftp/mysftp

##新建一個目錄供sftp用戶mysftp上傳文件

mkdir /data/sftp/mysftp/upload

chown mysftp:sftp /data/sftp/mysftp/upload

chmod 755 /data/sftp/mysftp/upload

##啟動sshd服務

service sshd start或者/usr/sbin/sshd -D &

##驗證sftp登陸使用:

sftp -P 39535 mysftp@localhost

##新建測試用戶:

useradd -d /data/sftp/119sftp -s /bin/false -g sftp 119sftp

rm -rf /data/sftp/119sftp/.bash*

echo 119sftp |passwd –stdin 119sftp

chown root:sftp /data/sftp/119sftp

mkdir /data/sftp/119sftp/upload

chown 119sftp:sftp /data/sftp/119sftp/upload

chmod 755 /data/sftp/119sftp

chmod 755 /data/sftp/119sftp/upload

##登陸測試

sftp -P 39535 119sftp@localhost

赞(0)