连接SFTP 服务器出错,我要高手200分+200分
FTP出现“数据 Socket 错误: 连接被拒”解决办法 通过FTP连接网站时出现“数据 Socket 错误: 连接被拒 列表错误”,如下图:( `: f) Q, L, U: `" g; L3 C( p' N DDgif (565 KB) 2007-8-27 02:52# |, n8 l" S4 }2 h3 V 出现这个错误的原因一般如下: E% M6 j# Y8 [1, 关闭被动模式;( {, H; o1 z" Q R/ ]7 ~9 n 2, 传输类型:二进制; 1 l5 C, \ Y( D+ G: a http://wwwdiscuznet/usersguide/install_faqhtm ! C2 Y- d# `/ {; e I3, 关闭防火墙7 O6 D4 S, I' r6 `! U 4, 关闭杀毒软件, y9 ~0 |) f H+ v 5, 关闭正在下载的程序,如:迅雷,BT,P2P软件等就是关闭一些占网速与电脑资源的程序" q# Y9 s1 y: w 8 Y7 s1 H) x' z& N现整理解决方法如下:: e" y a, Q! ~- x& ~' n% u w 1)工具:CutFTP32,在如下的菜单目录中设置: 9 b% r2 G; \# N2 e4 Q9 s& i编辑--设置--连接--防火墙--页面中的“PASV模式”,只要将前面的钩去掉就可以了。 8 [) M, V0 L5 a9 ]0 a 7 h% | f4 D2 H" b$ Z) B- x- i2)工具:FlashFXP3114,在如下的菜单目录中设置: m( |7 {1 c+ d5 u1 N 选项--参数设置--连接--页面中的“使用被动模式”,只要将前面的钩去掉就可以了。 2 \5 _7 s3 L- @: _: B& `: h3 r s2 u: J U , Q2 S% _" _/ m经常登录各种FTP服务器,会遇到socket错误,朋友也经常遇到,来问我。偏偏大家使用的是不同的FTP软件,所以,今天我把几种目前常用FTP软件的解决办法告诉大家。 : D( P$ i5 S) T& c( J( ` 8 f- e: o$ [8 k" k B( h: z ★Cute FTP 35英文版:FTP—>Settings—>Options—>Firewall,将“PASV mode”前复选框中的打勾去掉。 6 e0 M9 A/ B" B5 U 3 s' }$ |, _$ O& ^ E ★Cute FTP35中文版:FTP—>设置—>选项—>防火墙,“PASV方式(A)”前复选框中的打勾去掉。 2 |+ P+ O6 Z8 L+ A5 [( A0 }$ R f ★Cute FTP40中文版:右击你所建立的ftp站点—>选择属性(properties)—>去掉"use PASV mod" 选择项7 f l$ @5 n" 7 _ W) p& w 2 f( P3 ~0 \ q2 R& i& [ ★Cute FTP Pro20中文版:编辑—>全局设置—>连接—>连接类型,“PASV/PORT”下拉选项菜单选择PORT。 2 ^% y4 F4 _4 M" P8 k6 {; w1 E& M + L: U, k% f! B2 O# ~6 l7 u+ ~ ★Leap FTP272:Sites—>Site Manager—>Advanced,将“Use PASV mode”前复选框中的打勾去掉。9 E5 a! E d P% k f8 A 2 O" M i& E2 }" Y- ★flashfxp : 选项->参数->代理->去掉“使用被动模式” % U/ R; A4 R/ p$ i 5 d9 U! g: z' x★FlashFXP软件关闭被动模式的方法:# J! @, K, x9 8 V 顶部工具栏--选项--参数设置--连接--使用被动模式勾去掉-OK 3 W V$ ^; g/ h z j) U h( f- N( ]5 w# X0 ^) I+ l★flashget : 选
从技术角度来分析,几个要求:
1、从安全方面看,sftp会更安全一点
2、线上服务器提供在线服务,对用户需要控制,只能让用户在自己的home目录下活动
3、用户只能使用sftp,不能ssh到机器进行操作
提供sftp服务,可以用系统自带的internal-sftp,也可以使用vsftpd,这里需求不多,直接选用internal-sftp。
限制用户只能在自己的home目录下活动,这里需要使用到chroot,openssh 48p1以后都支持chroot,我现在用的是CentOS 63,自带的openssh已经是53p1,足够了。
可以输入:
# ssh -V
来查看openssh的版本,如果低于48p1,需要自行升级安装,不在这里具体介绍了。
假设,有一个名为sftp的组,这个组中的用户只能使用sftp,不能使用ssh,且sftp登录后只能在自己的home目录下活动
1、创建sftp组
# groupadd sftp
2、创建一个sftp用户,名为mysftp
# useradd -g sftp -s /bin/false mysftp
# passwd mysftp
3、sftp组的用户的home目录统一指定到/data/sftp下,按用户名区分,这里先新建一个mysftp目录,然后指定mysftp的home为/data/sftp/mysftp
# mkdir -p /data/sftp/mysftp
# usermod -d /data/sftp/mysftp mysftp
4、配置sshd_config
编辑 /etc/ssh/sshd_config
# vim +132 /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 internal-sftp
这行指定使用sftp服务使用系统自带的internal-sftp
Match Group sftp
这行用来匹配sftp组的用户,如果要匹配多个组,多个组之间用逗号分割
当然,也可以匹配用户
Match User mysftp
这样就可以匹配用户了,多个用户名之间也是用逗号分割,但我们这里按组匹配更灵活和方便
ChrootDirectory /data/sftp/%u
用chroot将用户的根目录指定到/data/sftp/%u,%u代表用户名,这样用户就只能在/data/sftp/%u下活动,chroot的含义,可以参考这里:http://wwwibmcom/developerworks/cn/linux/l-cn-chroot/
ForceCommand internal-sftp
指定sftp命令
AllowTcpForwarding no
X11Forwarding no
这两行,如果不希望该用户能使用端口转发的话就加上,否则删掉
5、设定Chroot目录权限
# chown root:sftp /data/sftp/mysftp
# chmod 755 /data/sftp/mysftp
错误的目录权限设定会导致在log中出现”fatal: bad ownership or modes for chroot directory XXXXXX”的内容
目录的权限设定有两个要点:
1、由ChrootDirectory指定的目录开始一直往上到系统根目录为止的目录拥有者都只能是root
2、由ChrootDirectory指定的目录开始一直往上到系统根目录为止都不可以具有群组写入权限
所以遵循以上两个原则
1)我们将/data/sftp/mysftp的所有者设置为了root,所有组设置为sftp
2)我们将/data/sftp/mysftp的权限设置为755,所有者root有写入权限,而所有组sftp无写入权限
6、建立SFTP用户登入后可写入的目录
照上面设置后,在重启sshd服务后,用户mysftp已经可以登录,但使用chroot指定根目录后,根应该是无法写入的,所以要新建一个目录供mysftp上传文件。这个目录所有者为mysftp,所有组为sftp,所有者有写入权限,而所有组无写入权限
# mkdir /data/sftp/mysftp/upload
# chown mysftp:sftp /data/sftp/mysftp/upload
# chmod 755 /data/sftp/mysftp/upload
7、重启sshd服务
# service sshd restart
到这里,mysftp已经可以通过sftp客户端登录并可以上传文件到upload目录。
如果还是不能在此目录下上传文件,提示没有权限,检查SElinux是否关闭,可以使用如下指令关闭SElinux
关于Linux命令的介绍,看看《linux就该这么学》,具体关于这一章地址3w(dot)linuxprobe/chapter-02(dot)html
修改/etc/selinux/config文件中的SELINUX="" 为 disabled ,然后重启。或者
# setenforce 0
一般服务器为了安全禁止ssh下root账号登录,此时使用sftp登录管理服务器只能使用普通账号登录,给管理带来诸多不便,可以设置为特定普通SSH用户添加sudo权限
默认的登录是没有root权限的 ,在winscp使用scp方式登录后,想打开如root文件夹或想修改服务器文件时会出现没有权限的提示然后修改失败,如下图:
无权访问,错误码:3 服务器返回的错误信息:Permission denied 权限不允许
1产生在群晖Nas中设置打开终端 启动 Ssh功能
2使用putty 或win10 命令行 ssh 登录 ssh
ssh root@19216808 其中 192168,08 为你群晖nas的IP
密码为你管理员的密码
root@MyNas:/etc# sudo -i #切换为管理员身份
现输入 你管理员的密码
root@MyNas:/etc# cd etc #转换到etc 目录
root@MyNas:/etc# cp sudoers sudoersbak #先备份sudoers 这个文件,以防万一
root@MyNas:/etc# vi sudoers #修改 sudoers 文件 进入后,按i 进入编辑插入状态
找到这一行
# Allow members of group administrators to execute any command
%administrators ALL=(ALL) ALL
将其改为 :%administrators ALL=(ALL) NOPASSWD: ALL
然后按esc 键,再输入 :wq! 保存
因为sudoers 为只读文件,如果只用:wq 保存,会提示这是只读(readonly) 无法保存,所以要wq! 强制保存
3然后在winscp 会话管理中进行这样的修改
在登录窗口的点击“高级”进入高级设置:
点 编辑 修改 站点,点高级,SCP/Shell 中修改默认为 sudo su -
然后保存就可以了
4 winscp 再打开群晖Nas 的ssh, 就可以进入root的目录 及进行管理员的相关操作了
如修改文件,删除文件等
特别注意: 为了保证安装,在不再使用winscp 时,建议最好改回sudoers 文件的内容或恢复备份文件,并且关闭 群晖 终端机 的 ssh功能 (端口也可改一下)这样保证群晖nas的安全。
查看sftp-server执行文件目录:
cat /etc/ssh/sshd_config|grep sftp Subsystem sftp /usr/libexec/openssh/sftp-server
编辑/etc/sudoers为特定用户添加执行sftp sudo权限:
#useradmin user ALL=NOPASSWD: /usr/libexec/openssh/sftp-server
后续如果登录失败日记显示:
sorry, you must have a tty to run sudo ; TTY=unknown
需在/etc/sudoers内注释此行:
#Defaults requiretty
sftp客户端设置登录以sudo权限执行sftp,下图以winscp为例:
sudo /usr/libexec/openssh/sftp-server
此时用winscp登录就是root权限了,对整个系统的文件都拥有控制权!
密码的保存和保密是一件很麻烦的事,因为解密也是需要Key的,于是这就涉及到哲学中“先有鸡还是先有蛋”的问题。
那么问题来了,如果我们生产环境需要用到sFTP,密码如何保存呢?答案就是不用密码,把key种到对方服务器,建立互信关系。这个procedure同样适用于ssh帐号。
(生成private key 和public key。private key存在本地,public key 种在远程帐号。于是加密连接就靠这对key了。)
0条评论