web-dev-qa-db-ja.com

SSH:1つのコマンドで設定ファイルの値を変更する方法

たとえば、コマンドの/etc/ssh/sshd_configPasswordAuthenticationの値を変更するにはどうすればよいですか?

同様に、私が評価したい「キー」の前の#を削除します。これらすべてを1つのコマンドに含める必要はありません。私はかなりの数のサーバーをセットアップし、すべてが使い果たされている場所を覚えているので、コピーアンドペーストできる一連のコマンドを取得したいと思います。これは将来の参照のために機能します。

サンプル値:

PermitRootLogin no
ChallengeResponseAuthentication no
PasswordAuthentication no
UsePAM no
UseDNS no
7
Brian Graham

正規表現とsedは、このようなことを支援することができます。

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

私のDebianシステムでは、キーと値の間のスペースの数に関係なく、これによりPasswordAuthentication noPasswordAuthentication 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を台無しにした後、機能する構成に戻すことができます。 :)

12
Kenned

選択できるオプションはいくつかあります。

  • Puppet、Cfengine、Chef、またはその他の構成管理ツール
  • Augeas(augtool-> print/files/etc/ssh/sshd_config->次に「set」を使用)
  • sed -i
  • などなど

行きたい場所を推測しようとした後、とにかく構成管理の使用を検討することをお勧めします。

6
Valentin

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
4

sshd_configMatchブロックを含む可能性があるため、完全に解析せずに安全に編集することはできません。

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",
}
1
ℝaphink