如何加密curl命令保障服务器密码安全?Ubuntu终端文件传输有哪些方案?
解决方案
一、开源场景下的密码存储安全规范
- 绝对禁止硬编码密码到公开的脚本文件中:只要包含明文密码的脚本被提交到开源仓库,无论后续是否删除,密码都会泄露,存在被爬取滥用的风险。
- 敏感信息单独存储:将账号密码存放在独立的配置文件中,给文件设置
600权限(仅当前用户可读写),同时将该配置文件加入.gitignore等忽略规则,永远不提交到代码仓库。 - 第三方运行环境使用官方加密变量功能:如果脚本在GitHub Actions、GitLab CI这类第三方服务上运行,直接使用平台提供的加密敏感变量功能,密码会被平台加密存储,仅在脚本运行时动态注入到环境变量中,不会明文出现在代码或日志里。
- 不要做无效加密:不要将对称加密后的密码存放在脚本中,只要解密密钥同时存在于脚本或运行环境中,攻击者可以直接解密拿到明文密码,没有实际防护效果。
二、Bash中curl命令的敏感信息处理方案
curl本身提供了多种避免明文密码出现在命令行/脚本中的方案,不需要额外对命令做加密:
- 使用
--netrc参数读取独立配置
将FTP的登录信息存放在~/.netrc文件中,设置文件权限为600,文件内容格式如下:
machine ftp.server.ru login 你的登录账号 password 你的登录密码
修改curl命令为:
curl -T filedata.txt --netrc ftp://ftp.server.ru/
此时命令行和脚本中完全不会出现密码,也不会被ps等进程查看命令捕获到敏感信息。
2. 动态读取环境变量传入
如果不方便生成.netrc文件,可以将账号密码注入到环境变量中,结合curl的配置读取参数避免密码出现在进程参数里:
curl -K - <(echo "user = $FTP_USER:$FTP_PASS") -T filedata.txt ftp://ftp.server.ru/
环境变量不要写在脚本中,由运行环境动态传入即可。
额外提醒:FTP本身是明文传输协议,就算密码不泄露,传输过程中的内容也可能被抓包窃取,非必要不建议使用FTP做文件传输。
三、Ubuntu终端下更安全的文件传输替代方案
- scp:基于SSH协议加密传输,默认Ubuntu系统自带,不需要额外安装服务端(只要服务器开了SSH端口即可),无需单独维护FTP账号密码,使用SSH密钥登录即可完全避免密码泄露问题,命令示例:
scp filedata.txt 服务器SSH用户名@服务器IP:/文件存放目标路径/
- rsync:同样基于SSH加密,支持增量传输、断点续传,适合传输大文件或者批量同步文件,效率远高于scp和FTP,命令示例:
rsync -avz filedata.txt 服务器SSH用户名@服务器IP:/文件存放目标路径/
- rclone:支持对接FTP、SFTP、各类对象存储等几十种存储服务,敏感账号信息统一加密存储在rclone的配置文件中,适合需要对接多存储介质的场景。
内容的提问来源于stack exchange,提问作者Dew Debra
相关产品推荐
相关产品推荐

