SSH:如何在一个命令中更改配置文件中的值

Bri*_*ham 7 linux ssh echo

如何更改的价值,让我们说,PasswordAuthentication/etc/ssh/sshd_config中命令?

同样,删除我希望重视的“键”前面的 #。这些不必都在一个命令中。我设置了相当多的服务器,并记住一切都让人筋疲力尽,所以我想获得一系列我可以复制粘贴的命令,它为我完成工作以供将来参考。

示例值:

PermitRootLogin no
ChallengeResponseAuthentication no
PasswordAuthentication no
UsePAM no
UseDNS no
Run Code Online (Sandbox Code Playgroud)

Ken*_*ned 13

正则表达式和 sed 可以帮助处理这样的事情。

sed -re 's/^(PasswordAuthentication)([[:space:]]+)no/\1\2yes/' -i.`date -I` /etc/ssh/sshd_config
Run Code Online (Sandbox Code Playgroud)

在我的 Debian 系统PasswordAuthentication noPasswordAuthentication yes,无论键和值之间有多少空格,这都会切换到。

它将在创建原始文件的备份时替换文件中的选项(就地编辑),后缀由日期 ( sshd_config.2014-05-28)命名。

切换位置为是和否以切换其他方式。

删除前导的表达式#是这样的:

 sed -re 's/^(\#)(PasswordAuthentication)([[:space:]]+)(.*)/\2\3\4/' 
Run Code Online (Sandbox Code Playgroud)

- 并插入前导 -#符号:

 sed -re 's/^(PasswordAuthentication)([[:space:]]+)(.*)/#\1\2\3/' 
Run Code Online (Sandbox Code Playgroud)

#在前面使用可选的-sign切换一行(感谢 Barlop):

sed -re 's/^(\#?)(PasswordAuthentication)([[:space:]]+)no/\2\3yes/' 
Run Code Online (Sandbox Code Playgroud)

在所有这些表达式中,您可以更改PasswordAuthentication为您想要更改的任何其他选项 - 甚至可能将其设为 shell 脚本中的一个键,并制作一个“sshd 选项切换工具”。

Sed 和 regex 都很有趣和游戏,但我确信 Valentin 是正确的,如果你有很多系统,配置管理是要走的路。就我个人而言,我只是在几个很少更改的系统上使用 etckeeper/bazaar - 这不是配置管理,但它为我提供了版本控制,因此在我搞砸了正则表达式和sed -i. :)


Pyt*_*ner 6

有多种选择可供选择:

  • Puppet、Cfengine、Chef 或任何其他配置管理工具
  • Augeas(augtool -> 打印 /files/etc/ssh/sshd_config -> 然后使用“set”)
  • sed -i
  • 还有很多

在尝试猜测您要去哪里之后,您可能无论如何都想考虑使用配置管理。


Cri*_*itu 5

Augeas及其命令行工具 - augtool - 可以配置/etc/ssh/sshd_config. 例如:

augtool --autosave 'set /files/etc/ssh/sshd_config/PasswordAuthentication yes'
Run Code Online (Sandbox Code Playgroud)

要设置所有值,请使用:

SSHD_UsePAM=no
SSHD_UseDNS=no
augtool << EOF
set /files/etc/ssh/sshd_config/PermitRootLogin no
set /files/etc/ssh/sshd_config/ChallengeResponseAuthentication no
set /files/etc/ssh/sshd_config/PasswordAuthentication no
set /files/etc/ssh/sshd_config/UsePAM ${SSHD_UsePAM}
set /files/etc/ssh/sshd_config/UseDNS ${SSHD_UseDNS}
save
EOF
Run Code Online (Sandbox Code Playgroud)