こんにちは。
CGIから他のマシン上にシンボリックリンクを作る方法で困っています。
現在開発中のシステムは、フロントエンド用のマシンが複数(2台)あり、ロードバランサーにより、接続が切り替えられるようになっています。
つまり、同じURLアドレスにアクセスしても、どのマシンにつながるかはそのとき次第です。
このシステム上で、管理者メニューとして、Web上の項目を増やしたり減らしたりしたいのですが、その際に単なるファイルコピーやディレクトリの作成だけではなく、シンボリックリンクを作成したいのです。
同じマシン上であれば、パーミッションをそれなりに設定することで、CGIからでも、上記の操作が可能ですが、他のマシン(この場合、現在つながっていのいほうのもう1台のマシン)に対してはどのようにすればよいのでしょうか?
使えるプロトコルはsshとftpがあります。rcpやrloginは使えません。
sshを使えは、リモートマシンにシンボリックリンクを作成できるのですが、CGIから使用する方法がわかりません。シェルからであれば、暗号鍵を作ることにより、パスワードなしでのログインにも成功したのですが、CGIからだとユーザーが特殊なためにうまくいきません。
いっそ、CGIのLocationヘッダで飛ばすことも考えましたが、Basic認証を使っているために、パスワードを聞かれてしまい、その際にエスケープしてしまうと、処理が不完全になってしまいます。
なんとかsshでできないものかと調べてはいるのですが、いい情報がみつかりません。どなたか方法をご存知ないでしょうか。よろしくお願いします。
No.5ベストアンサー
- 回答日時:
ローカルで実行してみましたが、ホームディレクトリを555にした状態でも
ログインを確認できましたよ?
ログイン先への鍵登録(authorized_keys)もしてありますよね?
1点嘘ついたかもしれません、鍵はwww-dataで作成してください。
よく考えたら、鍵の作成は本人でないとだめな気がしました^^;;
のこるは、ホストベース認証(.shosts)くらいしか思い浮かばないです。
# サーバ同士の接続ならホストベースもありかなと。。。
参考までに僕が実験したときの情報です。
$ pwd
/tmp/webuser1_ssh
$ ls -la
total 12
drwxr-xr-x 2 webuser1 wheel 512 Apr 14 22:33 .
drwxrwxrwt 8 root wheel 512 Apr 14 21:51 ..
-rw------- 1 webuser1 wheel 219 Apr 14 22:33 config
-r-------- 1 webuser1 wheel 1675 Apr 14 21:53 webuser1_rsa
-r--r--r-- 1 webuser1 wheel 409 Apr 14 21:53 webuser1_rsa.pub
-r--r--r-- 1 webuser1 webuser1 599 Apr 14 22:21 known_hosts.global
$ cat config
Host TEST
Hostname localhost
User sshuser1
IdentityFile /tmp/webuser1_ssh/webuser1_rsa
UserKnownHostsFile /tmp/webuser1_ssh/known_hosts.global
# GlobalKnownHostsFile /tmp/webuser1_ssh/known_hosts.global
BatchMode yes
$ ssh -F /tmp/webuser1_ssh/config TEST
----
$ ls -la ~
total 22
dr-xr-xr-x 2 webuser1 webuser1 512 Apr 14 22:23 . ← 555
drwxr-xr-x 4 root wheel 512 Mar 30 20:59 ..
-rw------- 1 webuser1 webuser1 2017 Apr 14 22:23 .bash_history
-rw-r--r-- 1 webuser1 webuser1 751 Mar 30 00:22 .cshrc
-rw-r--r-- 1 webuser1 webuser1 248 Mar 30 00:22 .login
-rw-r--r-- 1 webuser1 webuser1 158 Mar 30 00:22 .login_conf
-rw------- 1 webuser1 webuser1 373 Mar 30 00:22 .mail_aliases
-rw-r--r-- 1 webuser1 webuser1 331 Mar 30 00:22 .mailrc
-rw-r--r-- 1 webuser1 webuser1 766 Mar 30 00:22 .profile
-rw------- 1 webuser1 webuser1 276 Mar 30 00:22 .rhosts
-rw-r--r-- 1 webuser1 webuser1 975 Mar 30 00:22 .shrc
検証ありがとうございます。
相変わらず、
Could not create directory '/var/www/.ssh'.
とは出るものの、接続に成功しました。
以下、手順です。
スーパーユーザーで作業します。
# mkdir .ssh
# chown www-data:www-data .ssh
# chmod 700 .ssh
# sudo -u www-data ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/var/www/.ssh/id_rsa):/XXX/XXX..XXX/.ssh/id_rsa <-作ったディレクトリを指定
Enter passphrase (empty for no passphrase): <-パスフレーズは入力しない
Enter same passphrase again: <-同じく入力しない
The key fingerprint is:
XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX www-data@xxxxxx
#vi .ssh/ssh_config
#cat .ssh/ssh_config
IdentityFile /XXX/XXX..XXX/.ssh/id_rsa
UserKnownHostsFile /XXX/XXX..XXX/.ssh/known_hosts
# id_rsa.pubをリモートマシンの~/.ssh/authorized_keysに追加
# sudo -u www-data ssh -F .ssh/ssh_config xxx@xxxx ls <-lsは適当
Could not create directory '/var/www/.ssh'.
The authenticity of host 'xxxx (xxx.xx.xx.xxx)' can't be established.
RSA key fingerprint is XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'XXXXX,XXX.XX.XX.XXX' (RSA) to the list of known hosts.
#
sudo -u www-dataでキーを作成することと、一回だけsudo -u www-dataでリモートマシンにログインするというのがキモのようですね。
エラーログにゴミが残るのがイマイチですが、まあよしとしましょう。
#リダイレクトすれば消せるんでしょうけど、本当のエラーが見えなくなっても困りますしね。
No.4
- 回答日時:
ものすごく危険なことをしようとしている気がしないでもないですが
鍵を直接指定してみてはいかがですか?
詳しくは man sshで。
手順的にはこんな感じなるのではないだろうかと。。。
1. 接続用の鍵を作成する(ユーザは誰でもいい)
2. 同じく configファイルを作成する
3. 実行する ssh -F 作成したコンフィグファイル host 'コマンドライン'
configファイル で IdentityFile を指定するのがポイントかと
でも、やったことないので、本当にできるのかわかりません。
作成したファイルはwebから参照できないように注意してください。
もしかしたら、鍵の所有者はwww-dataにしてあげないとだめかもしれません。
この回答への補足
ありがとうございます。
試してみましたがだめでした。
IdentityFileを指定するほか、IdentitiesOnlyをyesにしたり、UserKnownHostsFileを指定してみたりもしたのですが、相変わらずerror_logには、
Could not create directory '/var/www/.ssh'.
と出続け、意地でも/var/www/.sshを作ろうとするようです。
No.3
- 回答日時:
>www-dataは普通のユーザーではありませんので、ホームディレクトリがありません。
パスワードもわかりません。rootになれるならその辺いくらでも変更できると思うのですが? ということです。
'/var/www/.ssh'を作ろうとしているということは、www-dataのホームディレクトリが/var/www/だからでしょう。いざとなればrootで鍵セットを作ってそこに置いておけば他のユーザと同じくパスワードなしのログインが可能なはずです。またはwww-dataのホームディレクトリを変更してしまうことも可能なはず。
さらにどちらもできないということなら、SuExecで任意のユーザでhttpdを動かすとか。
そう言うことを自由にできるのがrootユーザなわけですから、最初の質問が出たわけです。
No.2
- 回答日時:
www-dataユーザがパスワードなしで相手マシンにログインできるようにすればいいのではないですか?
それでもエラーか何かがでてできないということでしょうか?
「ユーザーが特殊なため」の特殊とはどういう意味でしょうか。
この回答への補足
今知っているやりかたですと、ユーザーの~/.ssh/を必要とするのです。
www-dataは普通のユーザーではありませんので、ホームディレクトリがありません。パスワードもわかりません。
このため設定できない状態です。
認証キーファイルだけなら、-iオプションで設定できるようなので、これを設定してみてはいるのですが、apacheのエラーログを見ると、
Could not create directory '/var/www/.ssh'.
Host key verification failed.
と出ています。
CGIの環境変数を確認してみましたが、/var/www/を示しているものはなく、なぜ/var/www/.sshを作ろうとするのか不明です。これを作らせないようにすることができれば、うまくいきそうに思うのですが。
sshのオプションか、ssh_configで既存のディレクトリを設定できないものかと、いろいろ試しているのですが、どうにも設定てきない状態です。
あるいは、もっと他の方法がありますでしょうか?
No.1
- 回答日時:
>CGIからだとユーザーが特殊なためにうまくいきません。
ということはroot権限でマシンを操作できないのでしょうか?
少なくともhttpdの権限になれるか、SuExecで自分の権限でhttpdが動いてくれるかでないとsshでの実現は難しいですが。
もしそうならサーバ管理者に相談するのが手っ取り早いです。
この回答への補足
>ということはroot権限でマシンを操作できないのでしょうか?
ユーザーを確認すると、www-dataとなっています。
root権限は取得できますが、root権限があったとして、どのような設定を行えばよいのでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- CGI CGIが読み書きするデータファイルのパーミッションはさくらのインターネットでは何にするべき? 1 2023/05/02 16:44
- UNIX・Linux ubuntuサーバーを久々に再起動したらネットにつながらなくなった。 1 2022/06/06 16:21
- 計算機科学 これは迷路を解くというよりも、いかに速く最速で走り切れる経路を見出せるかや、マシン性能、プログラミン 3 2023/07/17 16:27
- その他(ソフトウェア) Corei7-12700とVmwareWorkstation17Proの相性は悪いの? 1 2023/01/09 20:21
- ラジコン・ミニ四駆 ラジコンでマリオカートみたいなこと 3 2023/02/02 12:58
- ビデオカード・サウンドカード グラボの16ピンの端子を 8ピン2つしか空いていない電源ケーブルに挿すには 2 2023/05/04 15:04
- CGI (フリーの)ツリー掲示版CGI、昔は多用させてもらいましたが・・今セキュリティ上どうでしょう? 2 2023/06/25 07:18
- CGI サイト訪問者の情報を取得したい 1 2023/02/21 11:03
- JavaScript [Java] Edgeでのアドレスバー非表示について 3 2022/04/20 17:51
- その他(パソコン・周辺機器) Windowsマシン。USBタップの「自動切れ、再接続」がうざい。解決策は? 7 2023/01/25 08:27
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Tomcat ドキュメントルートの設...
-
データベース接続文字列の暗号...
-
「ハードディスクがいっぱいで...
-
opencvでVECファイル作成について
-
mp4 ファイルの音声増幅
-
Googleドライブにインターネッ...
-
ショートカットファイルが開け...
-
Debug Assertion Failed?
-
勝手にショートカットのリンク...
-
VBAでFormat がうまく使えない
-
jw cadの名前をつけて保存・・...
-
急いでいます。XDWファイルの開...
-
DVD-Rなのに再書き込みや削除が...
-
C:\\Users\\All Users がエク...
-
シェルスクリプトでFTPの実行結...
-
Thunderbirdのプロファイルが読...
-
VB5のEXEの起動時エラー
-
メモ帳を保存せずに誤って閉じ...
-
フォルダ内のファイルの名前の...
-
Ubuntu18.04 デスクトップにWin...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excel2016 シート移動(ハイパ...
-
VBAでPDFの中のプロパティを見...
-
Tomcat ドキュメントルートの設...
-
eclipseの質問
-
【至急】Google reCaptchaについて
-
エクセルファイルの使用期限の...
-
c言語の変数一覧の取得
-
Webbrowser1,refreshとrefresh2...
-
ACCESS・VBAを利用者から隠す方法
-
opencvでVECファイル作成について
-
ローカルでFLASHが表示しない
-
FileMaker Pro10 ファイル共有
-
POI 読込 OutOfMemory
-
印鑑(日付印)の作成について
-
mp4 ファイルの音声増幅
-
httpsでsなし削除
-
cryptで暗号化する
-
CGIからSSHを使いたい
-
スタイルシート設定が反映されない
-
NETCOBOLからSQL2005へのアクセス
おすすめ情報