Centos7 配置sftp服务以及实现免密登录

本文详细介绍了在CentOS7上搭建SFTP服务并实现免密登录的全过程,包括用户创建、目录配置、权限设定及SELinux调整等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

sftp 免密登录分为两步骤

  1. 添加用户
  2. 配置密钥
一、添加用户

Centos7 已经自带了 opemssh,不需要再安装。

1、首先要确认openssh的版本大于 4.8p1,否则需要升级
ssh -V
2、创建sftp组
groupadd sftp
3、创建一个sftp用户,用户名为 sftp1,密码为123456

修改用户密码和修改Linux用户密码是一样的。

useradd -g sftp -s /sbin/nologin sftp1  //用户名(和下面二选一)
useradd -g sftp -s /bin/false sftp2  //用户名
passwd sftp1  //设置sftp1的密码

/sbin/nologin 和 /bin/false 区别

  1. /sbin/nologin
    礼貌拒绝用户登录,给出友好提示。
  2. /bin/false
    不允许登录系统,没有任何提示
4、sftp 组的用户的 home 目录统一指定到/data/sftp下,按用户名区分,这里先新建一个 sftp1 目录,然后指定用户 sftp1 的 home 为 /data/sftp/sftp1
mkdir -p /data/sftp/sftp1
# 指定用户 sftp1 的 home 为 /data/sftp/sftp1
usermod -d /data/sftp/sftp1 sftp1
5、配置 sshd_config,先备份

文本编辑器打开 /etc/ssh/sshd_config

vi /etc/ssh/sshd_config

找到如下这行,用#符号注释掉,大致在文件末尾处。

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

在文件最后面添加如下几行内容,然后保存。

Subsystem sftp internal-sftp
Match Group sftp
# 用chroot将用户的根目录指定到%h,%h代表用户home目录,这样用户 就只能在用户目录下活动。也可用%u,%u代表用户名
ChrootDirectory /data/sftp/%u
ForceCommand    internal-sftp
AllowTcpForwarding no
X11Forwarding no
6、设定Chroot目录权限
# 将文件 sftp1 的拥有者设为 sftp 群体的使用者 root 
chown root:sftp /data/sftp/sftp1
chmod 755 /data/sftp/sftp1
7、建立SFTP用户登入后可写入的目录

照上面设置后,在重启 sshd 服务后,用户 sftp1 已经可以登录(只能使用 sftp 登录,使用 ssh 登录不了)。但使用 chroot 指定根目录后,根应该是无法写入的,所以要新建一个目录供 sftp1 上传文件。这个目录所有者为 sftp1 ,所有组为sftp,所有者有写入权限,而所有组无写入权限。命令如下:

mkdir /data/sftp/sftp1/upload
chown sftp1:sftp /data/sftp/sftp1/upload
chmod 755 /data/sftp/sftp1/upload
8、修改/etc/selinux/config

文本编辑器打开/etc/selinux/config

vi /etc/selinux/config

将文件中的SELINUX=enforcing 修改为 SELINUX=disabled ,然后保存。
在输入命令

# setenforce是Linux的selinux防火墙配置命令 执行setenforce 0 表示关闭selinux防火墙
setenforce 0
9、重启sshd服务

输入命令重启服务。

service sshd restart 
10、验证sftp环境

用 mysftp 用户名登录,yes确定,回车输入密码。

sftp sftp1@127.0.0.1

显示 sftp> 则sftp搭建成功。

二、配置密钥
1、在客户机上使用 ssh-keygen 生成密钥,一路回车,Centos7 通过SSH使用密钥实现免密登录
2、这个密钥对中的公共密钥复制到你要访问的机器上的传输用户的家目录下,并保存为~/.ssh/authorized_keys,也就是下面 .ssh 目录
3、创建 .ssh 文件夹,并附权限
mkdir /data/sftp/sftp1/.ssh
chown sftp1:sftp /data/sftp/sftp1/.ssh
4、验证
sftp sftp1@192.168.0.101
<think>好的,我现在需要帮助用户了解如何通过SFTP实现服务器之间的文件传输。用户已经提供了一些引用资料,我需要结合这些资料来构建一个结构清晰、步骤明确的回答。 首先,我需要确认SFTP的基本概念和工作原理。SFTP是基于SSH的安全文件传输协议,所以需要确保服务器上已经安装了SSH服务,并且SFTP功能已启用。引用[2]提到安装vsftpd和openssh-sftp-server,这可能是在某些Linux发行版上的步骤,但要注意vsftpd其实是FTP服务器,而SFTP通常由OpenSSH提供,所以可能需要确认安装的是openssh-server,因为SFTP是SSH的一部分。 接下来,用户想知道如何配置服务器之间的传输。根据引用[4],可以通过配置本地的.ssh/config文件来简化连接,使用别名连接服务器。同时,引用[1]和[4]都提到了使用sftp命令连接服务器的基本方法,比如sftp user@hostname。 然后,我需要考虑服务器间传输文件的几种方法。一种方法是直接从一个服务器连接到另一个服务器,使用sftp的批处理模式或者管道命令。另一种方法是先下载到本地再上传,但用户可能更希望直接传输,所以需要重点讲解第一种方法。 关于密钥认证,引用[4]提到了使用IdentityFile指定私钥,这样可以免密码登录,这是实现自动化传输的关键步骤。需要指导用户生成SSH密钥对,并将公钥上传到目标服务器。 此外,内网穿透的问题在引用[3]中有所提及,如果服务器位于内网,可能需要配置端口转发或者使用内网穿透工具,但用户当前的问题可能更关注于服务器之间的直接传输,假设它们已经可以互相访问。 现在需要组织步骤:安装配置SSH/SFTP服务配置密钥认证,使用sftp命令进行传输,以及可能的自动化脚本。同时,要确保每个步骤都参考了正确的引用来源,比如安装步骤引用[2],配置别名引用[4]等。 可能还需要提到一些注意事项,比如防火墙设置,SSH端口是否开放,权限问题等。同时,生成相关问题时要考虑用户可能进一步的问题,比如性能优化、安全性、自动化传输等。 最后,检查是否有遗漏的要点,比如使用scp命令作为替代方案,或者rsync,但用户明确要求SFTP,所以应集中在sftp的使用上。确保所有命令示例正确,格式符合要求,比如代码块使用反引号,数学公式用$包裹等。</think>### 通过 SFTP 实现服务器间文件传输的方法及配置教程 SFTP(SSH File Transfer Protocol)是基于 SSH 的安全文件传输协议,适用于服务器之间的加密文件传输。以下是具体步骤和配置方法: --- #### 一、基础环境配置 1. **安装 SSH 和 SFTP 服务** 确保源服务器和目标服务器均已安装 OpenSSH(包含 SFTP 功能)。 ```bash # Ubuntu/Debian sudo apt install openssh-server # CentOS sudo yum install openssh-server openssh-clients ``` 若需独立 SFTP 服务,可补充安装组件(参考引用[2]): ```bash opkg install openssh-sftp-server ``` 2. **启动 SSH 服务** ```bash sudo systemctl start sshd && sudo systemctl enable sshd ``` --- #### 二、配置服务器间免密登录实现自动化传输,需配置 **SSH 密钥认证**: 1. **生成密钥对** 在源服务器执行: ```bash ssh-keygen -t rsa ``` 默认生成文件 `id_rsa`(私钥)和 `id_rsa.pub`(公钥)。 2. **上传公钥到目标服务器** ```bash ssh-copy-id -i ~/.ssh/id_rsa.pub user@target_server_ip ``` 或手动将公钥内容追加到目标服务器的 `~/.ssh/authorized_keys` 文件中。 3. **验证免密登录** ```bash ssh user@target_server_ip ``` 若无需输入密码即登录成功,则配置完成。 --- #### 三、使用 SFTP 直接传输文件 1. **交互式传输(手动操作)** 从源服务器连接到目标服务器: ```bash sftp user@target_server_ip ``` 常用命令: - `put local_file`:上传文件 - `get remote_file`:下载文件 - `ls`:查看远程目录 - `lls`:查看本地目录 2. **非交互式传输(脚本自动化)** 使用 `-b` 参数执行批处理命令: ```bash sftp -b commands.txt user@target_server_ip ``` `commands.txt` 内容示例: ``` put /path/to/local_file get /path/to/remote_file exit ``` 3. **服务器间直接传输(无需经过本地)** 通过 SSH 管道直接从源服务器传输到目标服务器: ```bash tar czf - /path/to/source | ssh user@target_server_ip "tar xzf - -C /path/to/destination" ``` 或使用 `scp`(基于 SSH 的简化的文件传输工具): ```bash scp -r /local/path user@remote_server:/remote/path ``` --- #### 四、高级配置技巧 1. **简化连接配置** 编辑 `~/.ssh/config` 文件(引用[4]): ```config Host server_alias HostName target_server_ip User username IdentityFile ~/.ssh/id_rsa ``` 之后可直接用 `sftp server_alias` 连接。 2. **防火墙与端口配置** 确保目标服务器的 SSH 端口(默认 22)在防火墙中开放: ```bash sudo ufw allow 22 ``` 3. **内网穿透场景** 若服务器位于内网,需通过反向代理或工具(如 `frp`)暴露端口(参考引用[3])。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值