私のスクリプトは以下のコマンドを実行しています:
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ファイルを使用します。これは重要ですか?
私の解決策の答えは このブログ投稿 にあります。
「最初にC:\path\to\cygwin\etc
ディレクトリでpasswd
というファイルを見つけてワードパッドで開きます。次に、テキスト/home/YOUR_NAME
を/cygdrive/c/Documents and Settings/YOUR_NAME
に置き換えて、最後にファイルを保存します。」
更新
一部の人々は、 "USER"と呼ばれるシステム変数に値として%USERPROFILE%を追加すると機能すると報告しています。
ここですべてを試してみて、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/passwd
fileは、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 :(の両方を掘り下げる必要があります。
同じ問題があり、すでに$ HOMEを%USERPROFILE%に設定しています。これは私のために働いたものです:
ファイルの行を変更します/etc/nsswitch.conf
から:
db_home: windows cygwin desc