netrc 文件格式介绍

发布时间: 更新时间: 总字数:939 阅读时间:2m 作者:IP:上海 网址

netrc 文件通常用于存储登录和初始化信息,供 ftp 或 rsh 等程序进行自动登录时使用。

介绍

netrc 文件是一个文本文件,其中包含一系列以换行符分隔的记录 (records)。每一条记录都由一系列的词法单元 (tokens) 组成。

关键词 (Keywords)

每条记录通常以一个机器名或特殊的关键字开始,然后跟着用于该机器的登录信息。

关键词 描述
machine name 定义一条用于主机名为 name 的远程机器的记录。随后的 login, password, account 等信息都适用于这台机器。
default 定义一条默认记录。如果找不到特定的 machine 记录,则使用这条记录。它必须是文件中的最后一条 machine 或 default 记录。
login name 指定用于自动登录的用户名 name。
password string 指定用于自动登录的密码 string。注意: 出于安全考虑,强烈建议将此文件设置权限为只有所有者可读写(例如 chmod 600 ~/.netrc)。
account string 指定一个额外的账户信息 string(如果远程主机需要)。
macdef name 定义一个名为 name 的宏。宏体从下一行开始,直到遇到一个空行或文件结束。
proxy name 定义一条用于代理主机名为 name 的远程机器的记录(不常用)。

格式规则

  • 分隔符: 词法单元之间用空格、制表符或换行符分隔。
  • 注释: 大多数实现(尤其是现代的 curl 或 wget)不支持行首的 # 作为注释。netrc 文件的原始规范没有定义注释机制。
  • 连续行: 一条记录可以跨越多行。

详细示例

以下是一个典型的 ~/.netrc 文件内容示例。请务必将文件权限设置为 600。

netrc
# 警告:原始netrc规范不包含注释。大多数ftp客户端会忽略它们,但为安全起见,应避免使用。
# 实际使用时,请移除行首的 # 符号。

# --- 1. 特定机器的记录 ---
# 用于连接到服务器 "ftp.example.com"
machine ftp.example.com
login my_ftp_user
password my_secure_password

# 用于连接到服务器 "backup.internal.lan",使用另一个用户
machine backup.internal.lan
login backup_admin
password admin_secret_pwd

# --- 2. 带有macdef宏的记录 ---
# macdef 用于定义宏,可以自动执行一系列命令。
# 宏体在空行之前结束。
machine upload.docs.com
login doc_uploader
password doc_upload_pwd
macdef init_upload
  binary             # 切换到二进制模式
  cd /incoming       # 切换目录
  lcd /local/files   # 切换本地目录
  prompt off         # 关闭交互式提示
  mput * # 上传所有文件
  quit

# --- 3. default 默认记录 ---
# 如果连接的主机名没有匹配的 machine 记录,则使用这条记录。
# 它必须是文件中的最后一条 machine 或 default 记录。
default
login anonymous
password user@example.com

示例用法(以 ftp 为例)

当您在命令行运行 ftp ftp.example.com 时:

  1. ftp 程序会读取您的 ~/.netrc 文件。
  2. 它会找到 machine ftp.example.com 这条记录。
  3. 它将使用 login my_ftp_user 和 password my_secure_password 自动登录,而无需您手动输入。

参考

  • Linux/Unix Man Page: 可以通过命令行查看您系统上的精确文档:

    bash
    man 5 netrc