web-dev-qa-db-ja.com

SSHはディレクトリ/home/USERNAME/.sshを作成できませんでした

私のスクリプトは以下のコマンドを実行しています:

command = os.system('rdiff-backup --exclude "**.dropbox**" --exclude "**.ini**" --remote-schema "ssh -o UserKnownHostsFile=/cygdrive/c/Users/Adam/.ssh/known_hosts -i /cygdrive/c/Users/Adam/.ssh/id_rsa %s -p1019 rdiff-backup --server" C:/Users/Adam/Dropbox [email protected]::/mnt/disk1/Adam/Dropbox')

ご覧のように、known_hostsフォルダーを探す場所とキーの場所を伝えました。これら2つの質問がないと、サーバーをknown_hostsに追加するたびに常に実行され、パスワードを入力するよう求められます。 、すべての実行に対して。 SSHがこれらを個別に見つけることができなかったのは残念なことです。私の仮定は、常に同じディレクトリC:\Users\Adam\.ssh

誰でも、私が今受け取る唯一のエラーメッセージはCould not create directory '/home/Adam/.ssh'-現在のユーザーのHOME変数が正しいことを確認しましたが、それでも.sshフォルダーが見つからないようです。スクリプトは問題なく実行されます。これは、この厄介なエラーメッセージです。 CygwinのSSHパッケージを使用していますが、これがどれほど重要かわかりません。また、.sshディレクトリは、Cygwinではなく、Rsyncのssh.exeファイルを使用します。これは重要ですか?

7
adampski

私の解決策の答えは このブログ投稿 にあります。

「最初にC:\path\to\cygwin\etcディレクトリでpasswdというファイルを見つけてワードパッドで開きます。次に、テキスト/home/YOUR_NAME/cygdrive/c/Documents and Settings/YOUR_NAMEに置き換えて、最後にファイルを保存します。」


更新

一部の人々は、 "USER"と呼ばれるシステム変数に値として%USERPROFILE%を追加すると機能すると報告しています。

11
adampski

ここですべてを試してみて、nssswitch.confファイルに次のようなものがある場合、何も機能しない2019年のタンブルウィードについて:

db_home: windows

管理モードで実行されているCygwinターミナルで、次のことを試してください。

export CYGWIN=winsymlinks:native
mkdir -p /home/$USER
ln -s $HOME/.ssh /home/$USER

その他の詳細

2015年にCygwinはデフォルトで/etc/passwdファイルの作成を停止しました:

Cygwinはpasswd/groupエントリをWindowsユーザーデータベース(ローカルSAMまたはActive Directory)から直接生成できるようになり、/ etc/passwdおよび/ etc/groupファイルを作成せずにCygwinを実行できるようになりました。 /etc/nsswitch.confファイルを導入して、passwd/group処理を構成します。

/ etc/passwdおよび/ etc/groupファイルを使用する必要があるボーダーケースの場合は、mkpasswd/mkgroupを変更して、SAM/ADから読み取られたエントリーと互換性のあるpasswd/groupエントリーを生成します。

から https://github.com/Alexpux/Cygwin/blob/master/winsup/cygwin/release/1.7.34#L4-L11

上記のように、mkpasswdコマンドとetc/passwdfileは、Windows Active Directoryと「接続」する方法の1つでした。

Active Directoryを使用している会社のコンピューターを使用している場合、Active DirectoryやCygwinが通信に失敗し、HOMEディレクトリが設定されている場所を制御するエントリが失われることがあります。これをテストするには、mkpasswdを実行し、ユーザー名がリストに表示されるかどうかを確認します。

mkpasswdを実行してもユーザー名が表示されない場合、デフォルトでは、Cygwinのssh.ssh内の/home/$USER/.sshフォルダーを検索します。 HOMEディレクトリがdb_home: windowsを指すC:\Users\$USERでCygwinを設定した場合、そのディレクトリは存在しません。したがって、上記のコマンドはこれを次のように修正します。

# Use windows native symlinks (only works in while running as admin)
export CYGWIN=winsymlinks:native

# Create missing directory structure (C:\[Cygwin install directory]\home\$USER)
mkdir -p /home/$USER

# Link C:\User\$USER\.ssh -> C:\[Cygwin install directory]\home\$USER\.ssh
ln -s $HOME/.ssh /home/$USER

これらのコマンドはハックであり、実際の解決策は、mkpasswdがユーザーのエントリを作成できない理由を解明することです。ただし、そのためには、おそらくActive DirectoryとCygwin :(の両方を掘り下げる必要があります。

2
ksrb

同じ問題があり、すでに$ HOMEを%USERPROFILE%に設定しています。これは私のために働いたものです:

ファイルの行を変更します/etc/nsswitch.confから:

db_home: windows cygwin desc

(この回答から)

0
TT--