mac 免密传送 scp 文件到 linux - sh 执行远程命令
1、在 A 上运行 ssh-keygen -t rsa 在/root/.ssh 下生成id_rsa 和 id_rsa.pub 两个文件
在/root/.ssh下复制备份一份id_rsa.pub 命名为 id_rsa.pub.A
2. 在 B 上也同样运行 ssh-keygen -t rsa
3、在 B 的 /root/.ssh 下创建authorized_keys文件 把A 中 id_rsa.pub.A 文件 传到 B /root/.ssh 下
通过 cat 命令 把id_rsa.pub.A 写到 authorized_keys 文件中
scp ./id_rsa.pub.A B的IP:/root/.ssh
cat id_rsa.pub.A >> authorized_keys
测试:最终从B服务器拷贝文件到A上,就无需输入密码了
*提示:在生成密钥的过程中,一直Enter即可,否则还是需要输入设置的密码
参考链接:https://blog.csdn.net/goodbyedaoke/article/details/79809509
如果本地已经有.ssh了,直接拷贝id_rsa.pub到服务器的~/.ssh/authorized_keys中(注意mac的用户必须和服务器的用户一致,如:mac是root,则服务器也需要是root,如果不是,则需要在linux下创建同名用户,很多教程没写,结果配置大半天,还是连接不上)
配置好之后,如果服务器的文件夹已经用root创建了,需要注意设置文件夹的权限,不然无法拷贝或覆盖,会提示没有权限
* 提示:配置免密文件传送,可先配置并测试好免密登录,这是必然要经过的一步
我的mac用户是我自己的名字,不是root,因此到服务器创建用户:
1. 添加新用户账号
useradd helloboy
2. 为新用户账号设置密码
passwd helloboy
3. 为新用户账号赋予root权限
usermod -a -G root helloboy
然后切换到这个用户:su - helloboy
拷贝mac上的~/.ssh/id_rsa.pub内容到服务器的~/.ssh/authorized_keys中(如果没有这个文件则手动创建下,如果存在则是将内容文本追加到最后)
重启sshd服务:
systemctl restart sshd.service
如果sshd服务没有启动,则需要启动该服务(一般都是启动的,可以查看是否启动:systemctl status sshd.service)
启动命令:systemctl start sshd.service
* 额外的可设置服务开启自启:systemctl enable sshd.service
一般错误的解决方案:
1、权限问题:
报错:Authentication refused: bad ownership or modes for directory /home/helloboy/.ssh
当前用户设置以下权限即可(记得要切换到客服端登录服务器的用户下执行,不是在root下,大部分命令都应该是在客户端登录用户下执行的)
chmod 700 .ssh/
chmod 600 .ssh/authorized_keys
2、文件拒绝访问:
报错:scp ~/xxx/xxx.xxx Permission denied
因这个目录不是连接用户创建的,因此要为这个目录授权可读写(也可以删除这个目录,然后通过这个用户创建目录,这样可以不用授权):
chmod 777 ~/xxx
比较有用的解决思路参考:https://blog.csdn.net/lisongjia123/article/details/78513244(这个人写的解决问题的思路,非常棒)
* 上面这篇文章执行了:chmod g-w /home/xxxx,但执行了这个命令后,是把该目录搞成了只读权限,而上传必须有可写权限,他解决的应该另外的错误[权限配置不当]执行的这个命令?网上查了下这个命令,解释为:chmod 修改文件权限 g 是group,表示组权限, w 表示可写,这句话表示当前所属用户的组对这个文件具有写的权限,减号表示去掉这个权限!
-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-
-
执行无需交互的远程命令
ssh username@ip "command"
,如ssh root@192.168.0.4 "pwd";带端口:ssh u0_a237@192.168.7.169 -p 8022 "cd /storage/emulated/0/roscript; git pull"
如果要执行多条命令,可以用分号区分:
ssh root@192.168.0.4 "pwd; echo 'hello'"
- termux查看当前登录用户
>: whoami - 手机上termux开启的sshd服务用的是8022端口,而不是默认的22端口
指定端口用:-p