スポンサーリンク

sshによるリモートアクセスを見分ける方法について
考えてみました。リモートアクセス時とそれ以外でプログラムの挙動を
変えるのが目的でした。

sshでリモートログインした場合、sshは、環境変数に
SSH_CLIENTSSH_CONNECTIONに値をセットします。
この存在を確認することで、sshによるアクセスかどうかを
判別することにしました。環境変数に依存するために、unsetされたら
sshによるアクセスと認識できなくなりますので、unsetされて困る場合は
別の方法を検討してください。


/usr/src/crypto/openssh/session.c

FreeBSDのsshのソースコード
/usr/src/crypto/openssh/session.c
からの抜粋です。

SSH_CLIENTは deprecated とコメントされているので、
利用するのは、あまり望ましくないかもしれません。

/* $OpenBSD: session.c,v 1.220 2006/10/09 23:36:11 djm Exp $ */

/* 省略 */

static int
auth_input_request_forwarding(struct passwd * pw)
{
	Channel *nc;
	int sock;
	struct sockaddr_un sunaddr;

	/* 省略 */

	/* SSH_CLIENT deprecated */
	snprintf(buf, sizeof buf, "%.50s %d %d",
	    get_remote_ipaddr(), get_remote_port(), get_local_port());
	child_set_env(&env, &envsize, "SSH_CLIENT", buf);

	laddr = get_local_ipaddr(packet_get_connection_in());
	snprintf(buf, sizeof buf, "%.50s %d %.50s %d",
	    get_remote_ipaddr(), get_remote_port(), laddr, get_local_port());
	xfree(laddr);
	child_set_env(&env, &envsize, "SSH_CONNECTION", buf);

	if (s->ttyfd != -1)
		child_set_env(&env, &envsize, "SSH_TTY", s->tty);
	if (s->term)
		child_set_env(&env, &envsize, "TERM", s->term);
	if (s->display)
		child_set_env(&env, &envsize, "DISPLAY", s->display);
	if (original_command)
		child_set_env(&env, &envsize, "SSH_ORIGINAL_COMMAND",
		    original_command);

	/* 省略 */
}


sshアクセスを判別する方法

Perlで書いてみました。

環境変数にSSH_CONNECTIONかSSH_CLIENTが存在したら、sshによるアクセス
とみなします。

#!/usr/local/bin/perl -w
use strict;

use Env qw(SSH_CONNECTION SSH_CLIENT);

my $remote = 0;
if(defined $ENV{SSH_CONNECTION} or defined $ENV{SSH_CLIENT} ) {
	$remote = 1;
}

print $remote, "\n";
参照しているページ (サイト内): [2009-03-03-1] [2008-10-19-1] [2008-08-17-1]

スポンサーリンク
スポンサーリンク
 
いつもシェア、ありがとうございます!


もっと情報を探しませんか?

関連記事

最近の記事

人気のページ

スポンサーリンク
 

過去ログ

2020 : 01 02 03 04 05 06 07 08 09 10 11 12
2019 : 01 02 03 04 05 06 07 08 09 10 11 12
2018 : 01 02 03 04 05 06 07 08 09 10 11 12
2017 : 01 02 03 04 05 06 07 08 09 10 11 12
2016 : 01 02 03 04 05 06 07 08 09 10 11 12
2015 : 01 02 03 04 05 06 07 08 09 10 11 12
2014 : 01 02 03 04 05 06 07 08 09 10 11 12
2013 : 01 02 03 04 05 06 07 08 09 10 11 12
2012 : 01 02 03 04 05 06 07 08 09 10 11 12
2011 : 01 02 03 04 05 06 07 08 09 10 11 12
2010 : 01 02 03 04 05 06 07 08 09 10 11 12
2009 : 01 02 03 04 05 06 07 08 09 10 11 12
2008 : 01 02 03 04 05 06 07 08 09 10 11 12
2007 : 01 02 03 04 05 06 07 08 09 10 11 12
2006 : 01 02 03 04 05 06 07 08 09 10 11 12
2005 : 01 02 03 04 05 06 07 08 09 10 11 12
2004 : 01 02 03 04 05 06 07 08 09 10 11 12
2003 : 01 02 03 04 05 06 07 08 09 10 11 12

サイト

Vim入門

C言語入門

C++入門

JavaScript/Node.js入門

Python入門

FreeBSD入門

Ubuntu入門

セキュリティ入門

パソコン自作入門

ブログ

トップ


プライバシーポリシー