ssh和scp使用介绍
本文以本地主机A和远程主机B为例说明。
配置 | 本地主机A | 远程主机B |
---|---|---|
IP | ip_a | ip_b |
主机名 | hostname_a | hostname_b |
用户名 | user_a | user_b |
ssh简单使用
从本地主机A登录到远程主机B
$ ssh user_b@ip_b
以上命令使用默认的SSH端口号22,如果远程主机为了安全考虑,改变了端口号,登录会报以下错误信息
ssh: connect to host xxx.xxx.xxx.xxx port 22: Connection refused
解决方法:命令需要加上选项-p port
指定端口号为port。
$ ssh -p 12345 usr_b@ip_b #这里假设端口号为12345
scp简单使用
从本地主机A传输a.txt
文件到远程主机B的目录/home/user_b/data目录下
$ scp a.txt user_b@ip_b:/home/user_b/data
如果需要传输整个目录的文件,需要加上-r
选项。
$ scp -r data user_b@ip_b:/home/user_b/data
如果端口号不是22的话,需要加上-P port
,注意是大写的P
。
$ scp -P 12345 -r data user_b@ip_b:/home/user_b/data
以上scp命令是在本地主机A发起的,也可以在远程主机B上发起scp命令,在B机器上使用scp传输本地主机A的文件方法变成:
$ scp user_a@ip_a:/home/user_a/a.txt /home/user_b/data
设置区别在于在一端主机上调用scp命令,必须指定另一端主机的user_name@ip
。
免密码密钥登录
以上ssh/scp命令使用会要求你输入主机B账号密码(如果scp命令在主机B发起,会要求输入主机A命令)。
对于经常使用的远程主机,可以考虑使用密钥免密码输入方式。
设置流程
- 在本地主机A生成密钥
$ ssh-keygen -t rsa #使用rsa算法生成密钥,支持其它密钥算法
命令执行成功会在~/.ssh
目录下生成两个文件:id_rsa
和id_rsa.pub
。
- 拷贝
id_rsa.pub
公钥文件中内容到远程主机B的~/.ssh/authorized_keys
文件中
这一步可以手动拷贝粘贴到远程主机B指定文件中,也可以使用封装好的命令ssh-copy-id
完成这一操作。
$ ssh-copy-id usr_b@ip_b #如果端口号不是22,加上-p port
- 在本地主机A上测试
在本地主机A上使用ssh命令登陆远程主机B,如果不再要求输入密码成功登录B,则说明配置成功。
ssh调试
在执行ssh不成功时,增加输出信息有助于问题诊断,使用-v
选项增加诊断信息,多个-v
增加输出详细程度。
$ ssh -v user_b@ip_b
$ ssh -vvv user_b@ip_b #最多3个v
scp也可以使用-v
增加诊断信息输出。
kex_exchange_identification错误
scp有时会遇到kex_exchange_identification: Connection closed by remote host
错误,可以尝试清空远程主机~/.ssh/known_hosts
文件内容。
$ echo > ~/.ssh/known_hosts
参考资料

