sftp ssh服务分离

sftp ssh服务分离,第1张

一、分离SSH和SFTP服务

系统内开启ssh服务和sftp服务都是通过/usr/sbin/sshd这个后台程序监听22端口,而sftp服务作为一个子服务,是通过/etc/ssh/sshd_config配置文件中的Subsystem实现的,如果没有配置Subsystem参数,则系统是不能进行sftp访问的。

1、 拷贝/usr/lib/systemd/system/目录下的sshdservice文件,放到/etc/systemd/system/目录下,命名为:sftpdservice

cp /usr/lib/systemd/system/sshdservice /etc/systemd/system/sftpdservice

2、 拷贝/etc/pamd/目录下的sshd文件,放到同目录,命名为:sftpd

cp /etc/pamd/sshd /etc/pamd/sftpd

3、 拷贝/etc/ssh/目录下的sshd_config文件,放到同目录,命名为:sftpd_config

cp /etc/ssh/sshd_config /etc/ssh/sftpd_config

4、 对service和rcsftpd进行软连接

ln -sf /usr/sbin/service /usr/sbin/rcsftpd

5、 对sshd和sftpd进行软连接

ln -sf /usr/sbin/sshd /usr/sbin/sftpd

6、 拷贝/etc/sysconfig/目录下的sshd文件,放到同目录,命名为:sftp

cp /etc/sysconfig/sshd /etc/sysconfig/sftp

7、 拷贝/var/run/目录下的sshdpid文件,放到同目录,命名为:sftpdpid

cp /var/run/sshdpid /var/run/sftpdpid

1、 修改/etc/systemd/system/目录下sftpdservice文件

vim /etc/systemd/system/sftpdservice

[Unit]

Description=sftpd server daemon

Documentation=man:sshd(8) man:sshd_config(5)

After=networktarget sshd-keygenservice

Wants=sshd-keygenservice

[Service]

Type=notify

EnvironmentFile=/etc/sysconfig/sftp

ExecStart=/usr/sbin/sftpd -f /etc/ssh/sftpd_config

ExecReload=/bin/kill -HUP $MAINPID

KillMode=process

Restart=on-failure

RestartSec=42s

[Install]

WantedBy=multi-usertarget

2、 修改/etc/ssh/目录下的sftpd_config文件

vim /etc/ssh/sftpd_config

具体修改如下:

Port 22 改成Port 指定端口

改成

PermitRootLogin no

就是取消该行的注释,并将yes改成no,这行参数的目的是拒绝root用户登录

改成

PidFile /var/run/sftpdpid

就是取消该行的注释,并将sshdpid改成sftpdpid

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

注释

Subsystem sftp internal-sftp

Match User sftpuser

X11Forwarding no

AllowTcpForwarding no

ForceCommand internal-sftp

3、 清空/var/run/目录下的sftpdpid文件内容

4、 添加sftp的专用账户

useradd sftpuser

passwd sftpuser

usermod -s /bin/false sftpuser

5、 禁用selinux

setenforce 0

6、 重启sftpd服务

systemctl daemon-reload

systemctl start sftpd

日常工作中需要大量、频繁地使用ssh到服务器查看、拉取相关的信息或者对服务器进行变更。目前公司大量使用的shell,但是随着逻辑的复杂化、脚本管理的精细化,shell已经不满足日常需求,于是我尝试整合工作中的需求,制作适合的工具。 由于管理制度的缺陷,我以工作流程为核心思考适合自己的运维方式,提升工作效率,把时间留给更有价值的事情。 完整代码在最后,请大家参考。

生产:4000+物理服务器,近 3000 台虚拟机。

开发环境:python36、redhat79,除了paramiko为第三方模块需要自己安装,其他的直接import即可。

批量执行 *** 作是一把双刃剑。批量执行 *** 作可以提升工作效率,但是随之而来的风险不可忽略。

风险案例如下:

挂载很多数据盘,通常先格式化硬盘,再挂载数据盘,最后再写入将开机挂载信息写入/etc/fstab文件。在批量lsblk检查硬盘信息的时候发现有的系统盘在/sda有的在/sdm,如果不事先检查机器相关配置是否一致直接按照工作经验去执行批量 *** 作,会很容易造成个人难以承受的灾难。

在执行批量 *** 作时按照惯例:格式化硬盘->挂载->开机挂载的顺序去执行,假设有的机器因为某些故障导致格式化硬盘没法正确执行。在处理这类问题的时候通常会先提取出失败的ip,并再按照惯例执行 *** 作。运维人员会很容易忽略开机挂载的信息已经写过了,导致复写(这都是血和泪的教训)。

所以,为了避免故障,提升工作效率,我认为应当建立团队在工作上的共识,应当遵守以下原则:

当然,代码的规范也应当重视起来,不仅是为了便于审计,同时也需要便于溯源。我认为应当注意以下几点:

1、ssh no existing session,sftp超时时间设置:

在代码无错的情况下大量ip出现No existing session,排查后定位在代码的写法上,下面是一个正确的示例。由于最开始没考虑到ssh连接的几种情况导致了重写好几遍。另外sftp的实例貌似不能直接设置连接超时时间,所以我采用了先建立ssh连接再打开sftp的方法。

2、sftp中的get()和put()方法仅能传文件,不支持直接传目录:

不能直接传目录,那换个思路,遍历路径中的目录和文件,先创建目录再传文件就能达到一样的效果了。在paramiko的sftp中sftplistdir_attr()方法可以获取远程路径中的文件、目录信息。那么我们可以写一个递归来遍历远程路径中的所有文件和目录(传入一个列表是为了接收递归返回的值)。

python自带的os模块中的oswalk()方法可以遍历到本地路径中的目录和文件。

3、多线程多个ip使用sftpget()方法时无法并发。

改成多进程即可。

4、多个ip需要执行相同命令或不同的命令。

由于是日常使用的场景不会很复杂,所以借鉴了ansible的playbook,读取提前准备好的配置文件即可,然后再整合到之前定义的ssh函数中。

同时,我们还衍生出一个需求,既然都要读取配置,那同样也可以提前把ip地址准备在文件里。正好也能读取我们返回的执行程序的结果。

参数说明:

密码认证:

公钥认证:

可以配合 grep,awk 等命令精准过滤。

个人认为 Python 在初中级运维工作中的性质更像是工具,以提升工作效率、减少管理成本为主。可以从当前繁琐的工作中解脱出来,去 探索 更有价值的事情。python 本质上并不会减少故障的产生,所以在不同的阶段合理利用自身掌握的知识解决当前最重要的痛点,千万不要本末倒置。

控制面板-程序-打开或关闭Windows功能,d出Windows功能窗口,里面有个tftp客户端。在前面打勾确定。然后在cmd里就可以使用sftp了。

C:\Users\ramma>sftp server

user name :

1、如何建立第一步 安装原版软件和汉化补丁,这个过程就不多说了,想必没人不会的。 2、安装完成后程序会自动运行,你也可以在菜单中选择运行。第一次运行程序,它会d出设置向导窗口,将会带你完成最初的设置。单击“下一步”,出现“显示菜单图像”的窗口,问你是否在菜单中显示小图像,看各人喜欢了。3、 单击“下一步”,这个窗口是让你在本地第一次运行FTP服务器,只要“下一步”就行了。 4、 接下来要你输入你的IP地址,如果你自己有服务器,有固定的IP,那就请输入IP地址,如果你只是在自己电脑上建立FTP,而且又是拨号用户,有的只是动态IP,没有固定IP,那这一步就省了,什么也不要填,Serv-U 会自动确定你的IP地址,单击“下一步”; 5、 在这儿要你输入你的域名,如果有的话,如:FEIMIAOno-ipcom,没有的话,就随便填一个;6、 “下一步”,询问你是否允许匿名访问。一般说来,匿名访问是以Anonymous为用户名称登录的,无需密码,当然如果你想成立一个会员区什么的,就应该选择“否”,不让随便什么人都可以登录,只有许可用户才行,在此我们填“是”;7、 “下一步”,问你匿名用户登录到你的电脑时的目录,你可以自己指定一个硬盘上已存在的目录,如E:\temp;8、 “下一步”,询问你是否要锁定该目录,锁定后,匿名登录的用户将只能认为你所指定的目录(F:\temp)是根目录,也就是说它只能访问这个目录下的文件和文件夹,这个目录之外就不能访问,对于匿名用户一般填“是”; 9、 “下一步”,询问你是否创建命名的帐号,也就是说可以指定用户以特定的帐号访问你的FTP,这对于办会员区可很有用哦,你可以对于每个人都创建一个帐号,每个帐号的权限不同,就可以不同程序地限制每个人的权利,方法将在后面讲到,这里选择“是”; 10、 “下一步”,请你填入所要建立的帐号的名称11、“下一步”,请输入密码,如:874 12、 “下一步”,询问登录目录是什么,这一步与第7步一样,如:F:\temp 13、 “下一步”,询问你是否要锁定该目录,同第8步,这里选择“否”; 14、 接下来询问你这次创建的用户的管理员权限,有几项选择:无权限,组管理员,域管理员,只读管理员和系统管理员,每项的权限各不相同;这里选择“系统管理员”;15、 最后一步,点击“完成”就OK了,你有什么需要修改的,可以点“上一步”,或者进入Serv-U管理员直接修改。至此,我们建立了一个域ftpabccom,两个用户,一个Anonymous,一个ldr。既然我们已经建立好FTP服务器,那么我们就应该可以用FTP客户端软件来尝试登录。怎么办呢?其实很简单,我们不用上网,就可以测试。我们知道,不上网时,本地机的IP地址默认就为127001,FTP端口号为21。Serv-U管理员中的各项设置 在设置完成后,将会进入Serv-U管理员的主界面,左边窗格中显示各个栏目,右边窗格中显示各个栏目的具体选项,下面就大概讲一讲设置内容。 1、 中,我们可以人 为地控制Serv-U引擎的运行或停止,记住,在Win 9x/Me 中,我们就要在此选择“系统服务”,才会运行Serv-U引擎。 2、 “许可”,如果你花美元买了注册号,就可以在此输入。 3、 “设置”,这个设置是对于“本地服务器”来说的。“常规”设置中可以限制服务器的最大速度,可以拦截FXP(站点到站点传送),也可以限制用户的数量,这样不至于你的服务器被拖跨。“目录缓存”设置中允许你自己确定目录列表的个数以及超时时间,在Windows 95 和 NT下,目录列表默认设置为25,当缓存满了之后,新的请求将替换老的请求。“高级”设置中可以让你自己定义服务器、Socket、文件的上传和下载的各项设置。 4、 “活动”,在这里记录了用户的活动日志,已封锁的IP的活动日志,以及任务日志;任务日志中显示的就是你开始停止的各项 *** 作记录,你可以点击右键,选择此过滤文本,使其只显示你所想见的内容。 5、 “域”,这里包含了你一开始根据向导所建立的用户、设置、域等。“域--设置”中所设置的内容其实与第3步差不多,只是它更加具体,可以对于每一个不同域定制。“域--活动”中记载了这个域下所有用户的活动情况。 6、 “域--组”,我们可以自己建立一些便于管理的组,然后把一类的用户归到一个组中。 7、 “域--用户”中 A、 对于一些不守规则的人,我们可以选择“禁用帐号”,虽然有帐号,但可以使用户一时间无法登录;你也可以设置让程序到达某个日期后自动删除某个帐号;下面几栏是这个帐号的基本信息,我们都可以在此更改,其中密码改过后并不显示,而是统一显示<<Encrypted>>,特别要注意选项“锁定用户于主目录”,什么意思呢?大家应该碰到,每次我们登录到FTP服务器上后,在根目录下只显示“/”,选择这项选项后,就是这样,如果不选,会出现什么情况呢?你可以做一下试验,在根目录下将显示“/f:/myself/”,也就是说显示了你硬盘中的绝对地址,这在某些情况下是很危险的,有不怀好意的高手,你就麻烦了! B、“常规”栏 你可以隐藏属性为隐藏的文件,可以限制同一IP的登录个数,是否允许用户更改密码(这需要客户端软件的支持),最大上传下载的速度,超时时间以及空闲时间,你也可以限制最大用户数量,如20,说明同时只能有20个用户登录。 C、“目录访问”栏 在此你可以控制用户对于文件目录的权限,对文件有读取、写入、删除、追加、执行等 *** 作,对于文件夹有列表、创建、删除,以及是否继承子目录;如果觉得目录不够,你也可以添加可访问的目录。 D、“IP访问”栏 在这里你可以规定某个IP是否可以访问你的FTP服务器,你可以拒绝它的访问,只要填上相应的IP地址,以后由这个IP的访问通通被拦下。 E、“上传/下载率”栏 在这里你可以设置上传和下载之间的比值,控制好上传和下载之间的数据流量关系。 F、“配额”栏 这里你可以为每个FTP用户设置磁盘空间,点击“计算当前”,可以知道当前目录下的所有空间大小,在“最大”一栏中填入你想要限制的容量。最后有一点,改过设置后一定要点击右键,选择“应用”使设置生效才行,否则一切都白做了!!

sftp是安全文件传送协议。为传输文件提供一种安全的加密方法。sftp 与 ftp 有着几乎一样的语法和功能。SFTP 为 SSH的一部份,可是这种传输方式使用了加密/解密技术,所以传输效率比普通的FTP要低得多。再具体的你可以找一下维基百科,相信他比我说的好,也详细的多。

linux虚拟机用sftp能脸上ftp连不上是因为你的linux本身安装了SSH,按照上面说的是SSH的一部份,所以SFTP能连上。而FTP服务器端程序本身linux没有安装,因此连不上。假如你需要使用FTP那就安装一下FTP服务器端程序,比如vsftp。

以上就是关于sftp ssh服务分离全部的内容,包括:sftp ssh服务分离、纯干货!python 在运维中的应用 (一):批量 ssh/sftp、如何在windows环境下用sftp 连接服linux务器 上传下载文件》等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10079778.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存