0%

shell命令之ssh

创建用户

创建voidking用户,并添加sudo权限:

1
2
3
useradd -m voidking -s /bin/bash
passwd voidking
adduser voidking sudo

生成密钥

1
2
ssh-keygen
ssh-keygen -C "voidking@qq.com" -f ./voidking_rsa

第一条命令执行完之后,.ssh目录下生成了 id_rsa 和 id_rsa.pub。
第二条命令执行完之后,当前目录下生成了 voidking_rsa 和 voidking_rsa.pub,注释内容为 voidking@qq.com

使密钥生效

1
2
3
ssh-copy-id -i ~/.ssh/id_rsa.pub voidking@hostname
ssh-copy-id -i ~/.ssh/id_rsa.pub voidking@hostname -p 22
ssh voidking@hostname

ssh-copy-id 这个命令做的事情,是把 id_rsa.pub 中的内容,追加到 hostname:/home/voidking/.ssh/authorized_keys 文件中。
authorized_keys文件权限为600。如果配置好了sshd,但是无法使用密钥登录机器,请检查authorized_keys文件权限。

密钥添加失败问题

如果ssh-copy-id报错cannot create .ssh/authorized_keys: Operation not permitted
或者手动编辑authorized_keys后无法保存,chmod也无法改变authorized_keys文件的权限。

那么可能是因为authorized_keys被加锁了,防止误删,需要先进行解锁。

1
chattr -i ~/.ssh/authorized_keys

参考文档chattr命令 – 更改文件隐藏属性

ssh执行远程命令

执行远程命令很简单,直接ssh后面跟着命令就可以了。

1
ssh root@192.168.56.100 "echo helloworld"

那如果远程命令里面包含双引号怎么办?变成单引号,或者添加转义。

1
2
ssh root@192.168.56.100 "echo 'helloworld'"
ssh root@192.168.56.100 "echo \"helloworld\""

那如果需要远程命令里使用变量怎么办?添加转义。

1
ssh root@192.168.56.100 "host=\$(hostname);echo \"\${host}\""

批量添加开机启动命令

已知主机列表hosts.txt内容为:

1
2
192.168.56.101
192.168.56.102

需求:给主机列表中的机器添加开机启动命令

脚本:

1
for i in `cat hosts.txt`; do ssh $i "echo '/home/voidking/start.sh' | sudo tee -a /etc/rc.local";done
  • 本文作者: 好好学习的郝
  • 本文链接: https://www.voidking.com/dev-shell-ssh/
  • 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!源站会及时更新知识点及修正错误,阅读体验也更好。欢迎分享,欢迎收藏~