暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

利用系统命令实现ssh登录和提权

老柴杂货铺 2025-03-05
223
折腾了一晚上,好不容易用python实现了Python-Fabric实现多服务器SSH免密登录并特权升级,结果发现几个命令,这下彻底睡不着了
一、linux下自动登录和提权
1.使用系统自带的sshpass向ssh传递密码,实现普通用户的登录,其中-o StrictHostKeyChecking=no是指第一次连接时不询问是否允许写入known_hosts
    #如果没有这个命令,可以直接yum -y install sshpass
    sshpass -p "user_pass" ssh  -o StrictHostKeyChecking=no user@10.168.2.51
    2.利用echo向su 传递密码,本来su默认也是交互式,但su有个参数-c 是可以支持这种方式
      echo 'root_pass' |su -c 'id' - root
      使用su切换到root执行id命令后再退出,返回结果如下:
        Password: uid=0(root) gid=0(root) 组=0(root)
        3.以上两条可以组合在一起使用
          sshpass -p "user_pass" ssh  -o StrictHostKeyChecking=no user@10.168.2.51 "echo 'root_pass' |su -c 'useradd test&& echo testpass|passwd --stdin test' - root"
          则远程连接并切换root后添加用户test并修改密码,然后退出ssh连接
          如果结合while循环,则可实现从文件读取服务器列表并依次执行命令的功能
          既然echo可以直接传递密码到su -c,那么自动提权的问题就基本解决了,接下来主要就是win下的自动登录问题了
          二、windows
          1.plink
          windows上并没有直接提供sshpass,找了源码,但编译时又要装一堆东西太麻烦,试了一下putty的plink(https://the.earth.li/~sgtatham/putty/latest/w64/plink.exe)
            plink  -P 53104 test@10.168.2.52 -pw user_pass -hostkey "ssh-ed25519 255 43:1b:ef:2f:5c:39:33:ab:04:c7:9e:1d:1a:10:6d:f3" -batch id
            存在的问题是有些机子的hostkey是一样的,有些则不同,新的hostkye必须手动保存,这就很不好用了
            2.tssh(https://github.com/trzsz/trzsz-ssh/releases)
            试了一下trzsz自带的tssh,这个支持多种安装方式,主要是终端好用,命令行不支持密码参数,但可以通过编辑~/.ssh/config文件与ssh共用同一个配置文件,支持明文、密文、密钥文件、expect等多种方式保存密码实现自动登录 ,这里仅以前三种方式举例
            ~/.ssh/config配置示例
            a.可以使用标准./ssh/config的配置方法,如通配符*?等,具体请参考官方文档:https://man.openbsd.org/ssh_config,或linux下执行:
              man ssh_config 
              b.openssh中不包含的参数配置,可以在命令前边加上#!! 实现兼容标准 ssh,tssh中文文档请参考:https://trzsz.github.io/cn/ssh.html
              c.密码明文:#!! Password your_pass_word
              d.密文:#!! encPassword  your_enc_password 
              使用tssh --enc-secret 输入密码生成
              e.密钥方式:IdentityFile  topath/your_key
              由ssh-keygen生成,公钥默认保存在~/.ssh/id_rsa.pub需要将文件内容发布到目标服务器的~/.ssh/authorized_keys,可以ssh-copy-id或者cat id_rsa>>~/.ssh/authorized_keys追加。
                #./ssh/config
                # *,匹配所有主机名
                Host cos*
                    #每隔 60 秒发送一个保持活动的信号,防止服务器断开连接
                    ServerAliveInterval 60
                    #是否自动将 key 加入到 ssh-agent
                    StrictHostKeyChecking no
                    AddKeysToAgent yes
                    #指定ssh端口
                    Port 53104
                    #指定用户名
                    User chai
                    #指定私钥(%d,本地用户目录 ~,%u,本地用户,%l,本地主机名,%h,远程主机名,%r,远程用户名
                    #dentitiesOnly yes
                    IdentityFile ~/.ssh/id_ed25519


                Host sx6412
                    HostName 10.168.2.232    
                    Port 53104
                    User chai
                    #指定私钥,官方标配
                    IdentityFile ~/.ssh/id_ed25519


                Host cos701
                    HostName 10.168.2.51
                    #如果配置在 ~/.ssh/config 中,可以加上 `#!!` 前缀,以兼容标准 ssh
                    # 下面是运行 tssh --enc-secret 输入密码 123456 得到的密文串,每次运行结果不同
                    #!! encPassword  916d26f13708e2e80c1dda7f6f1b9f14563ffdd3aca0561526567aedb7401495e5a3546c309588ce


                Host cos702
                    HostName 10.168.2.52
                    #使用明文密码
                    #!! Password your_pass_word


                Host cos703
                    HostName 10.168.2.53


                Host pve
                    HostName 10.168.2.117
                    #每隔 60 秒发送一个保持活动的信号,防止服务器断开连接
                    ServerAliveInterval 60
                    #是否自动将 key 加入到 ssh-agent
                    StrictHostKeyChecking no
                    AddKeysToAgent yes
                    #指定ssh端口
                    Port 22
                    #指定用户名
                    User root
                    #指定私钥(%d,本地用户目录 ~,%u,本地用户,%l,本地主机名,%h,远程主机名,%r,远程用户名
                    IdentitiesOnly yes
                    IdentityFile ~/.ssh/id_ed25519
                经过以上配置后,我们就可以用tssh指定主机名运行命令了
                  tssh cos701 "id && whoami"


                  uid=1000(chai) gid=1000(chai) groups=1000(chai),10(wheel)
                  chai
                  3.当然,还有我昨天推荐过的轻量级SSH批处理工具Multissh的技术解析与实践价值,这个可能更灵活一些
                  4.使用ps脚本:使用powershell实现并行远程连接ssh执行命令
                  5.使用python:Python-Fabric实现多服务器SSH免密登录并特权升级

                  文章转载自老柴杂货铺,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                  评论