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规范不包含注释。大多数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 时:
ftp 程序会读取您的 ~/.netrc 文件。
- 它会找到
machine ftp.example.com 这条记录。
- 它将使用
login my_ftp_user 和 password my_secure_password 自动登录,而无需您手动输入。
参考