背景
业务需要,我们需要经常登录开发板。我们这块开发板是linux的,用户有两个,分别是sshuser和root。
我们使用sshuser来登录开发板,用root来做一些特权操作。由于不能直接登录root,用户登录和切换过程特别麻烦centos自动登录root,因为要多次输入用户密码。 本机登录后,也要多次从普通用户sshuser提权到root。这个过程中也要输入密码。
有没有快捷的,提高操作效率的方法呢?
答案是,有!
免密登录对端linux设备
核心就是 ssh key。 用到的核心命令是 ssh-keygen和ssh-copy-id
具体操作
场景: 假设本机是host机器,要登录的机器是target机器,即host -> target
在host机器生成本机的秘钥和公钥 ssh-keygen -t rsa ,一路回车即可(没有秘钥会生成;已经有的话,原来的不会被覆盖)。(如果没有生成秘钥,直接执行第二步,会出现类似这样的报错 /usr/bin/ssh-copy-id: ERROR: failed to open ID file '/home/sshuser/.pub': No such file)在host机器执行命令 ssh-copy-id -p $(ssh端口号,如果为22则此项可缺省) ${用户名}@${target机器IP},比如ssh-copy-id sshuser@192.168.1.6复制公钥到target机器上(此步骤要确认的是,对应的用户名是可以正常登录的)。过程中要输入对应远端账号的登录密码。多级跳转
如果有这样的场景: A -> B -> Ccentos自动登录rootredhat linux 下载,由A登录到B,再由B登录到C,操作也是类似。开始A是host机器,B是target机器。完成上面的步骤后,B变为host机器,C则是target机器。
本linux设备免密码提权到root,执行特权操作
核心是这个文件/etc/sudoers。这个文件极为重要,修改的时候,要符合修改规则。 推荐使用专门命令sudo visudo,来编辑这个文件。因为在退出时,可以自动检测语法错误。
在编辑前。调整编辑器为自己喜欢的。用这个命令sudo update-alternatives --config editor
我这里推荐的是 vim.basic,其次是vim.tiny
$ sudo update-alternatives --config editor
There are 4 choices for the alternative editor (providing /usr/bin/editor).
Selection Path Priority Status
![centos root 默认密码_ubuntu root 自动登录_centos自动登录root](https://www.linuxpack.net/wp-content/uploads/2022/12/1670393104897_1.png)
------------------------------------------------------------
0 /bin/nano 40 auto mode
1 /bin/ed -100 manual mode
2 /bin/nano 40 manual mode
* 3 /usr/bin/vim.basic 30 manual mode
4 /usr/bin/vim.tiny 10 manual mode
Press to keep the current choice[*], or type selection number:
开始编辑。在文件里面添加这么一行: sshuser ALL=(ALL) NOPASSWD: ALL 整个行的意思是,sshuser这个普通用户,可以通过sudo这个命令,免密码以任何用户执行任何命令。 sshuser是要提权的普通用户,第一个ALL是这个规则对所有的host生效,第二个ALL是可以执行哪些用户的命令,最后一个ALL是可以执行哪些命令。
一个问题
在修改完/etc/sudoers之后,我给用户sshuser加了特权操作权限。 但出了这样的问题:
sshuser@mini0:~$ sudo ls
sudo: unable to resolve host mini0: Connection refused
原因是,本机的host名,即记录在/etc/hostname中的字符串,不在/etc/hosts中。解决办法是加上这个host名的实际IP即可。 我是这样加的 127.0.0.1 mini0 ,因为mini0是本机的host名,所以IP地址写的127.0.0.1(修改这个文件要用root权限)。
加完之后,再执行sudo操作,就没有报错了。
允许外部用ssh方式登录本linux设备的root用户切换到root用户root用户打开文件/etc/ssh/sshd_config 。找到有这个关键词PermitRootLogin所在这一行,将后面的参数由no改为yes在root的home目录下,执行下面的命令 `sudo -i mkdir -p .ssh && sudo -i chmod 700 ssh执行这个的命令,生成本机秘钥和公钥,一路回车 ssh-keygen -t rsa进入目录 $HOME/.ssh红旗linux下载,执行下面的命令
cat id_rsa.pub | sudo -i tee -a .ssh/authorized_keys
sudo -i chmod 600 .ssh/authorized_keys
重启ssh server服务。ubuntu上service sshd restart后记
以上免密码方法开启之后,会非常不安全,极易被攻破! 请谨慎使用!仅限于不重要的,或有安全防火墙保护的环境中使用!