Ssh, update .ssh/config for your dynamic ip
From Andreida
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