たとえば、コマンドの/etc/ssh/sshd_config
のPasswordAuthentication
の値を変更するにはどうすればよいですか?
同様に、私が評価したい「キー」の前の#を削除します。これらすべてを1つのコマンドに含める必要はありません。私はかなりの数のサーバーをセットアップし、すべてが使い果たされている場所を覚えているので、コピーアンドペーストできる一連のコマンドを取得したいと思います。これは将来の参照のために機能します。
サンプル値:
PermitRootLogin no
ChallengeResponseAuthentication no
PasswordAuthentication no
UsePAM no
UseDNS no
正規表現と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
を変更したい他のオプションに変更できます。おそらく、それをシェルスクリプトのキーにして、「sshdオプショントグルツール」を作成します。
Sedと正規表現はすべて楽しくてゲームですが、システムがたくさんある場合は、Valentinが構成管理について正しいと確信しています。個人的には、ほとんど変更されないいくつかのシステムでetckeeper/Bazaarを使用しています。これは構成管理ではありませんが、バージョン管理ができるので、正規表現とsed -i
を台無しにした後、機能する構成に戻すことができます。 :)
選択できるオプションはいくつかあります。
行きたい場所を推測しようとした後、とにかく構成管理の使用を検討することをお勧めします。
Augeas コマンドラインツールを使用 augtool -構成可能 /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
sshd_config
はMatch
ブロックを含む可能性があるため、完全に解析せずに安全に編集することはできません。
Augeasはそれを達成するための良いオプションですが、すでにMatch
ブロックがある場合、適切な場所にオプションを挿入することを管理するのは非常に簡単ではありません。 1つのオプションは、Puppetを sshd_config
Augeasベースのプロバイダー :
sshd_config { "PermitRootLogin":
ensure => present,
value => "yes",
}
このオプションを使用すると、厳密なパーサーを使用できるという利点があります(AugeasとSshd.lns
レンズ)およびMatch
ブロックの外側だけでなく、ブロックの内側でもパラメーターを設定する複雑さを管理する抽象化レベル(Puppetリソース):
sshd_config { "X11Forwarding":
ensure => present,
condition => "Host foo User root",
value => "yes",
}