我怎样才能改变命令中PasswordAuthentication
的值?/etc/ssh/sshd_config
另外,删除我希望赋值的“键”前面的 #。这些不必全部放在一个命令中。我设置了不少服务器,记住所有东西的位置很累,所以我想获得一系列我可以复制粘贴的命令,它会帮我完成工作以供将来参考。
示例值:
PermitRootLogin no
ChallengeResponseAuthentication no
PasswordAuthentication no
UsePAM no
UseDNS no
答案1
正则表达式和 sed 可以帮助解决这类事情。
sed -re 's/^(PasswordAuthentication)([[:space:]]+)no/\1\2yes/' -i.`date -I` /etc/ssh/sshd_config
在我的 Debian 系统上,这将切换PasswordAuthentication no
为PasswordAuthentication yes
,无论键和值之间的空格数是多少。
它将在创建原始文件的备份的同时替换文件中的选项(就地编辑),并以日期命名后缀(sshd_config.2014-05-28
)。
交换“是”和“否”的位置即可切换其他方式。
删除前导的表达式#
如下:
sed -re 's/^(\#)(PasswordAuthentication)([[:space:]]+)(.*)/\2\3\4/'
- 并插入前导#
- 符号:
sed -re 's/^(PasswordAuthentication)([[:space:]]+)(.*)/#\1\2\3/'
要切换一行,请#
在前面加上可选的 - 号(感谢 Barlop):
sed -re 's/^(\#?)(PasswordAuthentication)([[:space:]]+)no/\2\3yes/'
在所有这些表达式中,您可以更改PasswordAuthentication
为您想要更改的任何其他选项 - 甚至可能将其作为 shell 脚本中的键,并制作“sshd 选项切换工具”。
Sed 和 regex 都是好玩的游戏,但我相信 Valentin 的说法是正确的,如果你有很多系统,配置管理才是王道。我个人只在几个很少改变的系统上使用 etckeeper/bazaar - 它不是配置管理,但它为我提供了版本控制,因此在我搞砸了 regex 和 之后,我可以找回一个有效的配置sed -i
。:)
答案2
有多种选项可供选择:
- Puppet、Cfengine、Chef 或任何其他配置管理工具
- Augeas(augtool -> 打印 /files/etc/ssh/sshd_config -> 然后使用“set”)
- sed-i
- 还有很多
在尝试猜测您想要去的地方之后,您可能还是想考虑使用配置管理。
答案3
奥杰阿斯使用其命令行工具 -奥格工具- 可以配置/etc/ssh/sshd_config
。 例如:
augtool --autosave 'set /files/etc/ssh/sshd_config/PasswordAuthentication yes'
要设置所有值,请使用:
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
答案4
sshd_config
Match
由于它可能包含块,因此无法在未完全解析的情况下进行安全编辑。
Augeas 是实现此目的的不错选择,但当已有块时,管理在正确位置插入选项并不容易Match
。一种选择是使用 Puppet 和sshd_config
总部位于 Augeas 的提供商:
sshd_config { "PermitRootLogin":
ensure => present,
value => "yes",
}
Sshd.lns
该选项为您提供了使用严格解析器(带镜头的 Augeas)和抽象级别(Puppet 资源)的优势,它可以管理在Match
块外部以及块内部设置参数的复杂性:
sshd_config { "X11Forwarding":
ensure => present,
condition => "Host foo User root",
value => "yes",
}