从某些云服务商处购买的主机,一般会给你root密码访问,如果在自己的电脑上经常要登录,每次都输入密码不是很方便。其实可以使用密钥访问。
使用密钥SSH登录
为了为远程主机生成SSH密钥对,你可以在本地机器上使用ssh-keygen
命令。以下是生成SSH密钥对的步骤:
-
在本地机器上生成SSH密钥对:
打开终端(Linux或macOS)或命令提示符(Windows),然后运行以下命令:
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
在这个命令中,
-t rsa
指定使用RSA算法生成密钥,-b 4096
指定密钥长度为4096位,-C
选项用来添加注释(通常是你的电子邮件地址,用于标识密钥)。在运行命令后,它会要求你指定保存密钥的文件路径和文件名。如果不输入任何路径,密钥将会保存在默认路径(通常是
~/.ssh/id_rsa
)。然后,它会要求你输入一个密码(可选)。密码用于加密私钥文件,增加安全性。
-
将公钥传输到远程主机:
生成密钥后,你会在指定的路径下找到两个文件:
id_rsa
(私钥)和id_rsa.pub
(公钥)。将公钥文件(id_rsa.pub
)的内容复制到远程主机的~/.ssh/authorized_keys
文件中。你可以使用ssh-copy-id
命令来方便地将公钥复制到远程主机:ssh-copy-id root@REMOTE_HOST
(这儿以root用户为例,这会将该公钥copy到root用户的相应目录中,为了安全建议使用其他用户)
请将
REMOTE_HOST
替换为你的远程主机的IP地址或域名。该命令执行时会要求你输入用户的密码。如果你手动复制,确保将公钥内容添加到远程主机
~/.ssh/authorized_keys
文件的末尾,并且确保该文件的权限设置为600
(只有所有者可读写):chmod 600 ~/.ssh/authorized_keys
确保
~/.ssh
目录的权限为700
(只有所有者可读写执行):chmod 700 ~/.ssh
现在,你应该可以使用SSH密钥进行与远程主机的安全通信,直接使用 ssh root@REMOTE_HOST
即可免密码登录到远程主机。
另外,如果你之前已经生成了密钥对,例如提交到git时使用,那可以直接使用已有的密钥对。生成密钥对时使用的邮箱和远程主机的用户没有直接关系,关键是将公钥拷贝到那个用户的.ssh目录下面。
使用密钥进行rsync同步
同样,使用公钥可以方便的将文件rsync同步到远程主机。以下是一个示例脚本:
#!/bin/bash
# 源目录
SOURCE_DIR="/users/my/test/files"
# 目标主机地址
REMOTE_HOST="xx.xx.xx.xx"
# 目标目录
REMOTE_DIR="/var/www/html/myblog"
# 目标用户名
REMOTE_USER="root"
# 使用rsync命令进行同步,-a 参数表示以归档模式同步,-r 表示递归同步
rsync -ar --progress --delete -e "ssh -i ~/.ssh/id_rsa" $SOURCE_DIR/* $REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR
echo "Files copied successfully to $REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR"