各ユーザーの.sshディレクトリをbashから取得する信頼できる方法は何ですか?


8

/ etc / passwdをaugtoolで解析できます:

myuser=bob
usershome=`augtool -L -A --transform "Passwd incl /etc/passwd" print "/files/etc/passwd/$myuser/home" | sed -En 's/\/.* = (.*)/\1/p'`

...しかし、少し複雑すぎるようです。

ユーザーのホームを表示するためのシンプルな専用ツールはありますか(変更usermod使用できるなど)?


あなたは人形の答えを探していますか?
mgjk 2014年

@mgjkいいえ、私は人形でそれを行う方法を知っています。実際、私はこの答えはLXCコンテナのからくり士アップセット:-)ことをブートストラップスクリプトを記述する必要があります
アダム・ライチョースキー

回答:


15

/etc/passwd直接解析しないでください。リモートユーザーがいるシステムを使用している可能性があります/etc/passwd。その場合、ユーザーはに参加しません。/etc/passwdファイルはどこか別の場所かもしれません。等。

ユーザーデータベースに直接アクセスする必要がある場合は、を使用しますgetent

$ getent passwd phemmer
phemmer:*:1000:4:phemmer:/home/phemmer:/bin/zsh

$ getent passwd phemmer | awk -F: '{ print $6 }'
/home/phemmer

ただし、解析を行わない別の方法もあります。

$ user=phemmer
$ eval echo "~$user"
/home/phemmer

~シェルのオペレーターは、指定されたユーザーのホームディレクトリに展開されます。ただしeval、変数の展開はの$user展開後に発生するため、使用する必要があります~。したがってeval、二重引用符と二重引用符を使用すると、$user最初に効果的に展開してからを呼び出しeval echo "~phemmer"ます。

ホームディレクトリを取得/.sshしたら、最後に簡単に追加します。

$ sshdir="$(eval echo "~$user/.ssh")"
$ echo "$sshdir"
/home/phemmer/.ssh

awk魔法を含むすべての
洗練

1
sshdirは常にそうであると想定しても安全~/.sshですか?それは構成設定によってどこでも変更できますか、それともsshにハードコードされていますか?
terdon

2
これはデフォルトで/etc/ssh/ssh_configあり、およびで変更できますsshd_config。少なくともUbuntu 14.04では
Adam Ryczkowski、2014年

4

$ myuserのホームディレクトリを探していますか?

 awk -F: -v user=$myuser '$1==user { print $6 ;}' /etc/passwd

あなたは使うことができます

 awk -F: -v user=$myuser '$1==user { printf "%s/.ssh\n",$6;}' /etc/passwd

.ssh dirを取得します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.