Linux ssh 切换登录用户(例如 AWS云的 ec2-user,滴滴云的 dc2-user)自动转到root用户,很多场景里需要用到。

例如,Ubuntu本机普通用户 mimvp 切换到root,AWS(ec2-user)和滴滴云(dc2-user)默认普通用户切换到root

 

使用SSH登录远端的Linux服务器,假设登录使用的用户名是mimvp

登录成功后,会直接进入/home/mimvp/目录下,但这时使用的用户名还是mimvp,如下所示:

mimvp@ubuntu:~$ pwd
/home/mimvp
mimvp@ubuntu:~$ whoami
mimvp

 

如果要使用root用户的话,必须使用 sudo –s 进行切换,

因为root权限会频繁使用,如果希望SSH连接到Linux服务器后,自动切换到root用户,

方法如下:

1、修改普通用户的环境变量

切换到普通用户模式,修改普通用户目录下的 .bash_profile 配置文件

vim /home/mimvp/.bash_profile   或   vim ~/.bash_profile 

mimvp@ubuntu:~$ pwd /home/mimvp
mimvp@ubuntu:~$ sudo vim .bash_profile

在该文件中修改两处:

1)添加一行  

sudo su root

2)修改一行 (可选,经测试,不用修改

PATH=$PATH:$HOME/.local/bin:$HOME/bin

PATH=$PATH:$HOME/bin

修改后的 .bash_profile 配置文件:

# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
        . ~/.bashrc
fi
sudo su root

# User specific environment and startup programs

#PATH=$PATH:$HOME/.local/bin:$HOME/bin
PATH=$PATH:$HOME/bin

export PATH

使用 SecureCRT连接工具,不用重启,重新登录,即可切换到了 root (米扑验证成功

若本机需要生效,需要重启服务器,使修改生效

 

补充说明:登录后默认使用root超级账户的 .bash_profile 文件内容如下:

cat ~/.bash_profile (修改的是普通用户mimvp,不是root用的下的 ~/.bash_profile

# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
        . ~/.bashrc
fi

# User specific environment and startup programs

PATH=$PATH:$HOME/bin

export PATH

 

2、/etc/sudoers 文件修改

若添加了新用户,则需要把新用户添加到 /etc/sudoers 配置文件里,实现免密码切换到 root

1)修改文件权限,拥有编辑文件写的权限

chmod u+w /etc/sudoers

2)编辑文件 /etc/sudoers

vim /etc/sudoers

在root ALL=(ALL) ALL 下添加一行 xxx ALL=(ALL) NOPASSWD:ALL

## Allow root to run any commands anywhere 
root    ALL=(ALL)       ALL

xxx ALL=(ALL) NOPASSWD:ALL  # xxx为你的用户名

3)改回文件的原权限

chmod u-w /etc/sudoers

 

3、ssh 登录后,指定进入目录

只需要在 ~/.bash_profile 文件末尾增加一行

cd /your_path

例如ssh登录后默认想进入 /root/script 目录,则在 ~/.bash_profile 文件末尾增加一行:

cd /root/script

注意:若是普通用户切换到root,且切换目录,则步骤如下:

1)现在普通用户目录下,新建 script

mkdir /home/mimvp/script

2)把普通用户目录下的文件,软链接到root目录下

ln -s /home/mimvp/script /root/script

3)先进入指定目录,后切换root

cd /home/mimvp/.script

sudo su root

4)实测,在 AWS云 和 滴滴云上都成功

https://aws.amazon.com/amazon-linux-2/
[root@aws-japan .script]# 
[root@aws-japan .script]# pwd
/home/ec2-user/.script
[root@aws-japan .script]# ls -al /root/.script
lrwxrwxrwx 1 root root 22 May  2 21:40 /root/.script -> /home/ec2-user/.script
[root@aws-japan .script]# 
[root@aws-japan .script]# exit
[ec2-user@aws-japan .script]$ 

如上,SecureCRT 登录 AWS云上后

1)[root@aws-japan .script]  自动切换到了指定目录,且切换到了 root 超级用户

2)[root@aws-japan .script]# ls -al /root/.script  可见 /root/.script 软链接到了普通用户下的 /home/ec2-user/.script

这里,为什么是在普通用户下建立 .script 目录,然后软链接到超级用户 root 的 /root/.script 目录下呢?

原因是先登录时,是普通用户 ec2-user ,没有权限访问 /root/ 目录,只能访问自身普通用户下的目录

若把目录建立在超级用户root目录下,普通用户切换指定目录,或者先切换到root再进入指定目录,都是提示权限不够,报错提示如下:

https://aws.amazon.com/amazon-linux-2/
-bash: cd: /root/.script: Permission denied

 

完整的ssh登录切换到root,并自动进入指定 /root/script目录

cat ~/.bash_profile  或  cat /home/mimvp/.bash_profile  // 普通用户下的

# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
        . ~/.bashrc
fi

# User specific environment and startup programs

#PATH=$PATH:$HOME/.local/bin:$HOME/bin
PATH=$PATH:$HOME/bin

export PATH

## 先切换目录, 在普通用户 /home/ec2-user/ 目录下
cd /home/ec2-user/.script
#cd /root/.script

## 最后切换到 root, 否则不能切换到普通用户的目录下
sudo su root

 

附上shell脚本自动添加进入 /root/script 的shell代码

## login and cd /root/script
flag=`grep "script" ~/.bash_profile | wc -l`
script_dir='/root/script'
if [ -d "${script_dir}" -a "${flag}" -eq "0" ]; then
    echo "echo -e cd ${script_dir} >> ~/.bash_profile"
    echo -e "\ncd ${script_dir}" >> ~/.bash_profile
fi

代码说明,添加上判断有二:

1、判断 ~/.bash_profile 文件中是否已添加 script 目录

2、判断是否存在 /root/script

 

 

参考推荐

Linux sudo 免密码输入

Linux shell 脚本通过expect实现自动输入密码

Ubuntu 14.04 设置开机启动脚本

Mac OS 查看网络端口

Mac 上启用 root 用户或更改 root 密码

Mac sudo: /etc/sudoers is owned by uid 501, should be 0