V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
DravenJohnson
V2EX  ›  Linux

Debian 默认只有 Debian 用户,无 sudo,如何通过 su 来自动配置一些东西?

  •  
  •   DravenJohnson ·
    Psiphon-Labs · 2017-05-05 05:29:01 +08:00 · 9741 次点击
    这是一个创建于 2790 天前的主题,其中的信息可能已经有所发展或是发生改变。
    • 某 VPS 商提供的 VPS 只有 Debian 用户,root 默认是禁止的,通过证书登陆。
    • 默认没有安装 sudo,同时即使自己装好 sudo 也会提示说 Debian 不是 sudoers
    • 可以通过 su 来登陆进 root,但是需要输入密码

    现在我们希望通过自动化程序,最好 python,但也可以用 shell,来实现创建 VPS,这一步一句完成了,同时配置 VPS 以及安装内容。

    需要修改:

    • /etc/ssh/sshd_config
    • root 密码 需要安装:
    • 很多东西

    所以基本上第一步就是需要允许 root 登陆比较方便些。可是这样的非 sudoers 的 Debian 用户设置,如何操作呢?一个一个输入密码肯定不好,有没有办法自动输入密码的?

    第 1 条附言  ·  2017-05-09 01:23:20 +08:00
    最终办法:
    用 #32 的办法 python ssh 连接机器,我们本来其实也是用的这个办法

    然后先传一个写好的名为 script.sh 的文件,里面有更新 `/etc/ssh/sshd_config` 里面允许 root 登陆,允许密码登陆以及修改 root 密码

    然后 python 中
    cmd = 'sh -c "sleep 1; echo 密码" | script -qc "su -c \'bash /home/debian/script.sh\' - root"
    ssh.exec_command(cmd)

    更新后 SSH 可以直接以修改过的统一密码进入 root,后面就可以安装 sudo 在此修改密码等所有操作就都没问题了
    36 条回复    2017-05-09 01:25:20 +08:00
    DravenJohnson
        1
    DravenJohnson  
    OP
       2017-05-05 05:30:34 +08:00
    TL;DR 主要就是想通过先用的情况下的一个 VPS,在这上面配置一些东西,包括安装软件,修改密码,修改 ssh 等等。
    zhs227
        2
    zhs227  
       2017-05-05 06:08:39 +08:00
    没用过 debian,其它几种 linux 的话,都是把用户添加到一个特定的用户组就可以了。ubuntu 是添加到 sudo 组,centOS 是添加到 wheel 组。
    网上流传各种修改 /etc/sudoers 的方式,不太推荐。
    还是建议通过普通帐号用 sudo,sudo 可以自己找包装上去。
    ryd994
        3
    ryd994  
       2017-05-05 08:01:29 +08:00
    写好脚本
    su -c
    只要输一次密码
    总之你至少得输一次吧
    ivmm
        4
    ivmm  
       2017-05-05 08:03:22 +08:00
    apt-get install sudo ???
    imn1
        5
    imn1  
       2017-05-05 08:16:27 +08:00
    su
    vi /etc/sudoers

    自己加进去就是了

    其实人家就是为了安全,就算别人“误”登入,不知道 root 密码也不能做太多
    lekai63
        6
    lekai63  
       2017-05-05 08:35:28 +08:00 via iPhone
    没人提 发 ticket 么?
    与其费脑子跟程序死磕,不如试试与人交流套套近乎。说不得就能勾搭上人家 boss 给你免了服务器的费用 23333
    yushiro
        7
    yushiro  
       2017-05-05 08:45:29 +08:00 via iPhone
    安装 sudo 之后,把当前用户加入 sudo 组,就可以用 sudo 了,不需要手动配置 sudoers
    xiaket
        8
    xiaket  
       2017-05-05 09:02:03 +08:00
    不建议直接改 /etc/sudoers, 建议将合适的配置文件放进 /etc/sudoers.d/目录.
    LokiSharp
        9
    LokiSharp  
       2017-05-05 09:14:09 +08:00
    su root
    gpasswd -a USER_NAME wheel

    不要修改 sudoers 不安全
    choury
        10
    choury  
       2017-05-05 09:15:44 +08:00 via Android
    把 debian 加到 sudo 组里面就行了
    DravenJohnson
        11
    DravenJohnson  
    OP
       2017-05-05 09:28:50 +08:00
    @lekai63 发了 Tickets 了,不过这个云服务商什么都没有,不报希望可以解决


    @zhs227
    @ryd994
    @ivmm
    @imn1
    @yushiro
    @xiaket
    @LokiSharp
    @choury

    同一回复一下吧,现在的问题就是不管怎么样都需要输入一次密码:
    不管是安装 用任何 apt-get install sudo 安装 sudo ;或者是很多人说的一样,加到 sudo 组;还是说的 su root

    都无法避免输入一次密码。我们现在是想要通过一个 python 或者 shell 自动化这个步骤。当然如果谁能说出来把密码加在 shell scipt 里面的办法也是可以的。

    原因很简单,我们第一次需要 provisioning 500 个 VPS。以后每天需要删除 + 创建不少于 50 个 VPS,如果这个简单步骤无法自动化的话,那么基本来说就无法使用了。
    choury
        12
    choury  
       2017-05-05 09:38:20 +08:00 via Android
    @DravenJohnson 搜索 sudo 免密码
    ysicing
        13
    ysicing  
       2017-05-05 09:38:25 +08:00
    好奇哪家的 VPS
    yinflying
        14
    yinflying  
       2017-05-05 09:49:15 +08:00
    为了安全,我也把自己的 vps 改成这个样子,root 禁用登陆,使用普通用户登陆,并且没有 sudo 权限。

    楼上的方法都可以,不过个人还是支持直接加到 wheel 组比较好。
    lazycat
        15
    lazycat  
       2017-05-05 09:50:41 +08:00 via Android
    试试 expect ?
    imn1
        16
    imn1  
       2017-05-05 09:50:44 +08:00
    @DravenJohnson
    1.sudoers 可以改成免密的,我 lapton 装 debian 第一件事就是做这个
    2.仍然建议保留现在方式,服务器上还是不免密好
    LokiSharp
        17
    LokiSharp  
       2017-05-05 09:52:24 +08:00
    @DravenJohnson 既然你是 500 VPS 的大用户,你有权力发 Tickets 要求服务提供商为你修改配置脚本。
    嘛,一般来说服务商都会提供 API 文档让你开发自动部署脚本比如说腾讯云和阿里云的修改密码 API https://www.qcloud.com/document/api/213/1245
    https://help.aliyun.com/document_detail/25503.html?spm=5176.doc25485.6.835.jWnaII
    如果连 API 文档都没有的话。。。建议换一家服务商
    CRVV
        18
    CRVV  
       2017-05-05 09:59:22 +08:00 via Android
    man sudoers
    搜索 password
    另外,改配置要用 visudo
    ryd994
        19
    ryd994  
       2017-05-05 10:05:42 +08:00
    你们都想复杂了:
    echo password | su -c script.sh

    还有,这样的大客户,要求 provision 的时候带公钥真不难。大点的云服务商,比如 AWS,DO,包括 Vultr 都是可以的。
    不能注入公钥的服务商,窃以为技术水平不行,不值得用。
    fuxkcsdn
        20
    fuxkcsdn  
       2017-05-05 10:12:45 +08:00
    @ryd994 这命令在 bash 里输入会出现 su: must be run from a terminal 错误

    BTW,大客户要求定制化镜像应该很容易的
    DravenJohnson
        21
    DravenJohnson  
    OP
       2017-05-05 11:25:22 +08:00
    @ryd994 对,会有 20 楼说的那种情况。这个服务商很奇怪,注入公钥了,但是没有 sudo,所以 su 还是需要输入密码,很头疼

    @fuxkcsdn 其实不容易,主要是因为这个服务商比较奇葩。

    @CRVV 这些东西都没办法很好的通过一个 script 完成,尤其是 visudo 的时候系统需要提示输入密码的那个情况

    @LokiSharp 唉,这个 VPS 公司太小了,感觉没人愿意搞。他们的母公司是做服务器托管的,倒是挺大,欧洲和北美可能有近 15 个数据中心。但是 VPS 这个是个新项目,没有自定义镜像,没有 Snapshot,API 的创建还是个坏的,只能开机关机什么的。
    fuxkcsdn
        22
    fuxkcsdn  
       2017-05-05 11:31:29 +08:00
    看看 vps 是否默认有安装 expect
    或者尝试下 apt-get install expect 看需不需要密码,如果不需要的话,那一切就好办,需要的话就真无解了
    ryd994
        23
    ryd994  
       2017-05-05 11:41:44 +08:00
    @DravenJohnson
    @fuxkcsdn
    我在 centos 上测试没有问题
    试试 ssh -tt 还有 getty
    terminal 的话总是有办法造的
    araraloren
        24
    araraloren  
       2017-05-05 12:38:11 +08:00
    这种自动化交互,我第一时间想到的就是
    expect
    7654
        25
    7654  
       2017-05-05 12:46:19 +08:00
    这么大的量,为什么不定制 VPS 模版镜像呢
    Osk
        26
    Osk  
       2017-05-05 13:03:06 +08:00 via Android
    LANG=C expect -c 'spawn su -c /script; expect "Password:"; send "yourpass\n"; interact'
    Showfom
        27
    Showfom  
       2017-05-05 13:22:23 +08:00
    su -i
    输入密码
    然后就变成 root 了
    再 apt-get install sudo
    Showfom
        28
    Showfom  
       2017-05-05 13:26:31 +08:00
    @Showfom 说错了,直接 su 这个命令就行

    楼上的朋友们是多久没用 iso 装 Debian 8 了

    老早以前他默认就不带 sudo 了,都得自己装,服务商的话得看自己的模板优化,比如 Google Cloud 还有 Linode 这些都是会给你装好的,要是傻乎乎的什么都没有装那自然就没了

    楼主的情况应该是,你用 ssh key 登陆,但是没有给你 debian 默认用户的密码,所以你可以去控制面板找找有没有给你 debian 默认用户的密码,没有的话就去怼客服吧,要他们改模板去。
    Showfom
        29
    Showfom  
       2017-05-05 13:27:27 +08:00   ❤️ 1
    或者还有一种迂回的方案,要是控制台里你可以找到 root 密码,那么用 console 进去,然后 root 登陆安装下 sudo 呗
    LokiSharp
        30
    LokiSharp  
       2017-05-05 13:38:25 +08:00
    @Showfom #29 问题是他有 500 台机器要配置。
    目测他的 vps 没有装 expect,在没有 expect 的情况下 如何配置能自动输密码的自动化脚本
    Showfom
        31
    Showfom  
       2017-05-05 13:50:06 +08:00
    @LokiSharp 所以应该找服务商去解决而不是来 V2EX 提问
    v2exchen
        32
    v2exchen  
       2017-05-05 13:52:33 +08:00
    用 python ssh 登录,模拟人机交互。https://my.oschina.net/u/142602/blog/191822
    realpg
        33
    realpg  
       2017-05-05 17:03:28 +08:00
    redhat 工程师配出来的 debian/ubuntu 就这样……
    sylecn
        34
    sylecn  
       2017-05-06 18:26:42 +08:00 via Android
    装好 sudo 之后,可以配置某个(些)用户免密码使用 sudo。不在电脑前,不记得具体的格式了。在配置时要加一个 NOPASS 之类的参数。
    DravenJohnson
        35
    DravenJohnson  
    OP
       2017-05-09 00:19:13 +08:00
    @Showfom 这个服务商非常高傲,基本来说不管。主要 VPS 也是他们的副业可能。
    DravenJohnson
        36
    DravenJohnson  
    OP
       2017-05-09 01:25:20 +08:00
    @7654
    @CRVV
    @LokiSharp
    @Osk
    @Showfom
    @araraloren
    @choury
    @fuxkcsdn
    @imn1

    感谢所有回复,已经基本解决了,最后写个脚本然后一行 python 代码解决,更新一些 python 的代码就可以完全自动化了,谢谢个人。具体办法已经 Append 欢迎借鉴
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1339 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 34ms · UTC 17:27 · PVG 01:27 · LAX 09:27 · JFK 12:27
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.