SSH 常用指令¶
总览指令¶
在Linux中,SSH是一种常用的远程登录协议,可以实现安全的远程服务器登录和文件传输:
-
ssh:通过SSH连接到远程主机。例如:ssh user@hostname
-
ssh-keygen:生成SSH密钥对。使用这个命令可以生成公钥和私钥,用于身份验证。例如:ssh-keygen -t rsa
-
ssh-copy-id:将SSH公钥拷贝到远程主机上,以免每次登录都需要输入密码。例如:ssh-copy-id user@hostname
-
ssh-add:将私钥添加到SSH代理中,以便免密钥输入密码。例如:ssh-add ~/.ssh/id_rsa
-
ssh-agent:启动SSH代理。SSH代理是一个将私钥保存在内存中的程序,用于管理SSH身份验证过程。例如:eval
ssh-agent
-
scp:通过SSH在本地主机和远程主机之间传输文件。例如:scp localfile user@hostname:remotefile
-
sftp:通过SSH在本地主机和远程主机之间进行交互式文件传输。sftp提供了一个像FTP一样的命令行界面。例如:sftp user@hostname
-
sshfs:在本地主机上通过SSH将远程主机的文件系统挂载到本地文件系统中。这样可以方便地访问远程文件。例如:sshfs user@hostname:/path/to/remote/dir /path/to/local/dir
-
sshd:SSH守护进程,用于监听SSH连接请求,并处理SSH连接。例如:sudo service sshd start
-
ssh_config:SSH客户端的配置文件,用于设置SSH各种参数和选项。例如:/etc/ssh/ssh_config
详解用法¶
Note
在这些指令中,bxhu认为使用频率较高的是:ssh
, scp
, sftp
, ~/.ssh
ssh¶
significant
ssh
(Secure Shell)命令用于通过SSH协议连接到远程主机。它可以实现加密的远程登录和命令执行。
模板
Bash | |
---|---|
1 |
|
hostname
(远程主机),使用用户名user
。
ssh-keygen¶
ssh-keygen
命令用于生成SSH密钥对。密钥对包含公钥和私钥,用于无密码登录和身份验证。
模板
Bash | |
---|---|
1 |
|
这条命令会生成一个RSA密钥对。默认情况下,密钥会存储在~/.ssh/
目录下。
这一部分可以具体参见Github with SSH gen rsa
比如这是bxhu的 ~/.ssh
:
Bash | |
---|---|
1 2 |
|
ssh-copy-id¶
ssh-copy-id
命令用于将公钥复制到远程主机,以实现无密码登录。它会将公钥追加到远程主机的~/.ssh/authorized_keys
文件中。
模板
Bash | |
---|---|
1 |
|
这条命令会将本地用户的公钥复制到远程主机hostname
上的user
账户。
这会将公钥追加到远程主机的hostname
账户下的~/.ssh/authorized_keys
文件中
ssh-add¶
ssh-add
命令用于将私钥添加到SSH代理(ssh-agent
)中,以便后续的SSH会话可以使用该私钥进行身份验证。
模板
Bash | |
---|---|
1 |
|
这条命令会将指定的私钥(~/.ssh/id_rsa
)添加到SSH代理中。
ssh-agent¶
ssh-agent
是一个SSH代理程序,用于管理私钥并在内存中安全地保存私钥。
模板
Bash | |
---|---|
1 |
|
这条命令会启动SSH代理,并将环境变量配置为使用该代理。
scp¶
significant
scp
(Secure Copy)命令用于通过SSH在本地主机和远程主机之间传输文件。
模板
Bash | |
---|---|
1 |
|
这条命令会将本地文件localfile
复制到远程主机hostname
上的remotefile
位置。
比如我要把本地的/Users/huluobo/code_projects/Julia/
文件夹(及其所有子文件系统)拷贝进到远程的/home/bxhu
文件夹中:
scp默认情况下只处理单个文件,但可以使用-r选项递归地传输目录及其内容
Bash | |
---|---|
1 |
|
现在进sugon的bxhu下查看
Bash | |
---|---|
1 2 3 4 5 6 7 8 9 10 |
|
sftp¶
significant
sftp
(Secure File Transfer Protocol)命令用于通过SSH进行交互式文件传输。它提供了类似FTP的命令行界面。
模板
Bash | |
---|---|
1 |
|
这条命令会启动一个与远程主机hostname
的SFTP会话,使用用户名user
。
远程连接会话:
Bash | |
---|---|
1 |
|
进入SFTP会话后,您可以使用以下命令进行文件操作:
ls:列出当前远程目录的文件和子目录
Bash | |
---|---|
1 |
|
pwd:显示当前远程工作目录
Bash | |
---|---|
1 |
|
lcd:切换本地工作目录
Bash | |
---|---|
1 |
|
此时选中的本地工作目录就是“文件传输”的“本地端”
cd:切换远程工作目录
Bash | |
---|---|
1 |
|
此时选中的远程指定工作目录就是“文件传输”的“远程端”
get:从远程主机下载文件到本地
Bash | |
---|---|
1 |
|
如果要下载或上传目录,需要使用 get -r
或 put -r
选项来递归处理目录内容。单独使用 get 或 mget 只能处理单个文件,而不能处理目录。
put:将本地文件上传到远程主机
Bash | |
---|---|
1 |
|
mget:从远程主机下载多个文件到本地
Bash | |
---|---|
1 |
|
mput:将多个本地文件上传到远程主机
Bash | |
---|---|
1 |
|
mkdir:在远程主机上创建新目录
Bash | |
---|---|
1 |
|
rmdir:删除远程主机上的目录
Bash | |
---|---|
1 |
|
rm:删除远程主机上的文件
Bash | |
---|---|
1 |
|
bye 或 exit:退出SFTP会话
Bash | |
---|---|
1 |
|
example (新建):
Bash | |
---|---|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
|
Note
- rmdir 命令只能删除空目录
- 如果您尝试删除一个包含文件或子目录的目录,将会失败。要删除非空目录,可以先递归删除目录内的所有文件和子目录,再删除该目录
- 在 sftp 会话中没有直接的命令来递归删除目录。因此,通常情况下,可以通过 ssh 连接到远程主机,并使用 rm -rf 命令来递归删除目录
sshfs¶
sshfs
命令用于通过SSH将远程主机的文件系统挂载到本地文件系统中。这样可以方便地访问远程文件。
模板
Bash | |
---|---|
1 |
|
/path/to/remote/dir
挂载到本地目录/path/to/local/dir
。
sshd¶
sshd
(SSH Daemon)是SSH守护进程,用于监听SSH连接请求并处理SSH连接。
模板
Bash | |
---|---|
1 |
|
这条命令会启动sshd
服务,允许远程主机连接到本机。
ssh_config¶
significant
ssh_config
是SSH客户端的配置文件,用于设置SSH的各种参数和选项。它通常位于/etc/ssh/ssh_config
或~/.ssh/config
。
示例配置
Text Only | |
---|---|
1 2 3 4 5 |
|
这个配置块指定了在连接到github.com
时使用的用户名、主机名、私钥文件和端口号。