Ssh, update .ssh/config for your dynamic ip

From Andreida
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

If you want to access your remote/home system with an entry like the following, but the IP is a dynamic one, then continue reading

Host ShortNameForYourServer
    HostName        NameOfYourServerOrIP
    Port            22
    User            smith
    ForwardAgent    no
    ForwardX11      no


  • Allow server to create file with ip

Create somewhere on your webspace a file like

<?php
if (isset($_REQUEST['set']) && $_REQUEST['set'] === "true")
{
    $ip = $_SERVER['REMOTE_ADDR'];
    file_put_contents("ip", $ip);
}
  • Call the script from the computer with the dynamic ip (ssh-server)

Create a cronjob like the following (crontab -e)

5,20,35,50 * * * * wget -q -O /dev/null  http://your-domain.com/set?set=true > /dev/null
  • Create a script on the ssh-client to modify the .ssh/config file (you need to modify the script!)

Make sure to have the following entries in your config file for this server:

No IP entries in known_hosts:

UserKnownHostsFile    /dev/null

no check for the ip:

StrictHostKeyChecking no


#!/usr/bin/php
<?php
$sUrl = "http://your-domain.com/ip";
$sProxy = 'tcp://proxy-of-your-company-or-remove-line:8080';
$sHost = 'YourSshServer';
$sConfigFilePath = "/home/you/.ssh/config";

$arrHeader = array();
$arrHeader[] = 'Content-type: application/x-www-form-urlencoded';

$arrOptions = array('http' => 
                array(
                    'method'    => 'POST',
                    'header'    => $arrHeader,
                    'proxy'     => $sProxy,
                    )
        );
$context = stream_context_create($arrOptions);
$sIp = @file_get_contents($sUrl, false, $context);

$arrFile = file($sConfigFilePath, FILE_IGNORE_NEW_LINES);

$sSearch = 'Host ' . $sHost;
foreach($arrFile as $nKey => $sLine) 
{
	if (trim($sLine) == $sSearch) 
	{
		$arrFile[$nKey + 1] = "HostName\t\t\t" . $sIp;
	}
}

file_put_contents($sConfigFilePath, implode("\n", $arrFile) );

  • Create a cronjob on your ssh client computer to call the script
10,25,40,55 * * * * /home/you/bin/update-YourSshServer.php