making an automate reverse SSH connection at boot
Clash Royale CLAN TAG#URR8PPP
I have a PC behind a NAT which makes a reverse SSH connection to my Digitalocean VPC. I utilise this reversed SSH connection from home to login to my office PC (I am authorised to do so) and copy files and do other important things.
Although not often, I noticed that my office PC restarts (due to power failures etc) and breaks the reversed SSH connection it has made with my VPC. In these kind of cases, I am unable to connect from my home PC to my office PC.
I run the following script to make the reversed connection + dynamic proxy to anonymise my traffic ( As I am not required to share browsing information) generated at the office PC.
autossh -CD 8080 -i digitalOcean -R 8081:localhost:22 root@IPofDigitalOceanPC
There is no way I can run thsi script again on my office PC upon a restart as I am not physically there. In order to solve this problem I installed the following crontab.
Note: rev.sh
file contains the above line. The certificate "digitalOcean" and rev.sh is located in Ubuntu home
. Therefore, when I execute ./rev.sh
in my Ubuntu terminal I obtain a dynamic proxy and also access to ym DigitalOcean server. This method works 100%.
However when I install the chrontab in the following method, My ubuntu PC never makes a Dynamic proxy. I can see this because when I check this proxy from Google Chrome, it says proxy is refusing connection.
Here are the cronejobs I tried as roots cronejobs. I also tried these as a normal user, still they didn't work.
@reboot bash /home/user/rev.sh
@reboot /home/user/rev.sh
@reboot cd /home/user && ./rev.sh
I then installed a chrontab a several minutes before the current time and waited for it to execute.
24 12 8 * * * bash /home/user/rev.sh
24 12 8 * * * /home/user/rev.sh
these did not execute either.
Please be kind enough to help me spot my mistake.
There are many similar questions on this website on my issue. I have referred many answers hence but none of them seemed to help.
ssh cron ssh-tunneling openssh
add a comment |
I have a PC behind a NAT which makes a reverse SSH connection to my Digitalocean VPC. I utilise this reversed SSH connection from home to login to my office PC (I am authorised to do so) and copy files and do other important things.
Although not often, I noticed that my office PC restarts (due to power failures etc) and breaks the reversed SSH connection it has made with my VPC. In these kind of cases, I am unable to connect from my home PC to my office PC.
I run the following script to make the reversed connection + dynamic proxy to anonymise my traffic ( As I am not required to share browsing information) generated at the office PC.
autossh -CD 8080 -i digitalOcean -R 8081:localhost:22 root@IPofDigitalOceanPC
There is no way I can run thsi script again on my office PC upon a restart as I am not physically there. In order to solve this problem I installed the following crontab.
Note: rev.sh
file contains the above line. The certificate "digitalOcean" and rev.sh is located in Ubuntu home
. Therefore, when I execute ./rev.sh
in my Ubuntu terminal I obtain a dynamic proxy and also access to ym DigitalOcean server. This method works 100%.
However when I install the chrontab in the following method, My ubuntu PC never makes a Dynamic proxy. I can see this because when I check this proxy from Google Chrome, it says proxy is refusing connection.
Here are the cronejobs I tried as roots cronejobs. I also tried these as a normal user, still they didn't work.
@reboot bash /home/user/rev.sh
@reboot /home/user/rev.sh
@reboot cd /home/user && ./rev.sh
I then installed a chrontab a several minutes before the current time and waited for it to execute.
24 12 8 * * * bash /home/user/rev.sh
24 12 8 * * * /home/user/rev.sh
these did not execute either.
Please be kind enough to help me spot my mistake.
There are many similar questions on this website on my issue. I have referred many answers hence but none of them seemed to help.
ssh cron ssh-tunneling openssh
I'm not quite sure what is your problem here. Is it cron not starting any job? Or script not working? With both problems, please, consult logs. Cron should write somewhere to/var/log/cron*
. For test purposes you could simply write something like*/2 * * * * /path/to/script
- it will run a script every 2 minutes. Also check for mails for user running cron. Is it root? Usemail
command. Oh, I can see that you are using ssh key? I doubt that cron job will be able to find it if you won't give a full path to it after-i
switch.
– Kalavan
Nov 22 '16 at 11:06
add a comment |
I have a PC behind a NAT which makes a reverse SSH connection to my Digitalocean VPC. I utilise this reversed SSH connection from home to login to my office PC (I am authorised to do so) and copy files and do other important things.
Although not often, I noticed that my office PC restarts (due to power failures etc) and breaks the reversed SSH connection it has made with my VPC. In these kind of cases, I am unable to connect from my home PC to my office PC.
I run the following script to make the reversed connection + dynamic proxy to anonymise my traffic ( As I am not required to share browsing information) generated at the office PC.
autossh -CD 8080 -i digitalOcean -R 8081:localhost:22 root@IPofDigitalOceanPC
There is no way I can run thsi script again on my office PC upon a restart as I am not physically there. In order to solve this problem I installed the following crontab.
Note: rev.sh
file contains the above line. The certificate "digitalOcean" and rev.sh is located in Ubuntu home
. Therefore, when I execute ./rev.sh
in my Ubuntu terminal I obtain a dynamic proxy and also access to ym DigitalOcean server. This method works 100%.
However when I install the chrontab in the following method, My ubuntu PC never makes a Dynamic proxy. I can see this because when I check this proxy from Google Chrome, it says proxy is refusing connection.
Here are the cronejobs I tried as roots cronejobs. I also tried these as a normal user, still they didn't work.
@reboot bash /home/user/rev.sh
@reboot /home/user/rev.sh
@reboot cd /home/user && ./rev.sh
I then installed a chrontab a several minutes before the current time and waited for it to execute.
24 12 8 * * * bash /home/user/rev.sh
24 12 8 * * * /home/user/rev.sh
these did not execute either.
Please be kind enough to help me spot my mistake.
There are many similar questions on this website on my issue. I have referred many answers hence but none of them seemed to help.
ssh cron ssh-tunneling openssh
I have a PC behind a NAT which makes a reverse SSH connection to my Digitalocean VPC. I utilise this reversed SSH connection from home to login to my office PC (I am authorised to do so) and copy files and do other important things.
Although not often, I noticed that my office PC restarts (due to power failures etc) and breaks the reversed SSH connection it has made with my VPC. In these kind of cases, I am unable to connect from my home PC to my office PC.
I run the following script to make the reversed connection + dynamic proxy to anonymise my traffic ( As I am not required to share browsing information) generated at the office PC.
autossh -CD 8080 -i digitalOcean -R 8081:localhost:22 root@IPofDigitalOceanPC
There is no way I can run thsi script again on my office PC upon a restart as I am not physically there. In order to solve this problem I installed the following crontab.
Note: rev.sh
file contains the above line. The certificate "digitalOcean" and rev.sh is located in Ubuntu home
. Therefore, when I execute ./rev.sh
in my Ubuntu terminal I obtain a dynamic proxy and also access to ym DigitalOcean server. This method works 100%.
However when I install the chrontab in the following method, My ubuntu PC never makes a Dynamic proxy. I can see this because when I check this proxy from Google Chrome, it says proxy is refusing connection.
Here are the cronejobs I tried as roots cronejobs. I also tried these as a normal user, still they didn't work.
@reboot bash /home/user/rev.sh
@reboot /home/user/rev.sh
@reboot cd /home/user && ./rev.sh
I then installed a chrontab a several minutes before the current time and waited for it to execute.
24 12 8 * * * bash /home/user/rev.sh
24 12 8 * * * /home/user/rev.sh
these did not execute either.
Please be kind enough to help me spot my mistake.
There are many similar questions on this website on my issue. I have referred many answers hence but none of them seemed to help.
ssh cron ssh-tunneling openssh
ssh cron ssh-tunneling openssh
edited Nov 17 '16 at 9:22
Rui F Ribeiro
41.3k1481140
41.3k1481140
asked Nov 17 '16 at 8:27
DinaDina
10329
10329
I'm not quite sure what is your problem here. Is it cron not starting any job? Or script not working? With both problems, please, consult logs. Cron should write somewhere to/var/log/cron*
. For test purposes you could simply write something like*/2 * * * * /path/to/script
- it will run a script every 2 minutes. Also check for mails for user running cron. Is it root? Usemail
command. Oh, I can see that you are using ssh key? I doubt that cron job will be able to find it if you won't give a full path to it after-i
switch.
– Kalavan
Nov 22 '16 at 11:06
add a comment |
I'm not quite sure what is your problem here. Is it cron not starting any job? Or script not working? With both problems, please, consult logs. Cron should write somewhere to/var/log/cron*
. For test purposes you could simply write something like*/2 * * * * /path/to/script
- it will run a script every 2 minutes. Also check for mails for user running cron. Is it root? Usemail
command. Oh, I can see that you are using ssh key? I doubt that cron job will be able to find it if you won't give a full path to it after-i
switch.
– Kalavan
Nov 22 '16 at 11:06
I'm not quite sure what is your problem here. Is it cron not starting any job? Or script not working? With both problems, please, consult logs. Cron should write somewhere to
/var/log/cron*
. For test purposes you could simply write something like */2 * * * * /path/to/script
- it will run a script every 2 minutes. Also check for mails for user running cron. Is it root? Use mail
command. Oh, I can see that you are using ssh key? I doubt that cron job will be able to find it if you won't give a full path to it after -i
switch.– Kalavan
Nov 22 '16 at 11:06
I'm not quite sure what is your problem here. Is it cron not starting any job? Or script not working? With both problems, please, consult logs. Cron should write somewhere to
/var/log/cron*
. For test purposes you could simply write something like */2 * * * * /path/to/script
- it will run a script every 2 minutes. Also check for mails for user running cron. Is it root? Use mail
command. Oh, I can see that you are using ssh key? I doubt that cron job will be able to find it if you won't give a full path to it after -i
switch.– Kalavan
Nov 22 '16 at 11:06
add a comment |
6 Answers
6
active
oldest
votes
I'm not sure if using cron
to run a script on startup is such a good idea. An alternative I see more fit is to create a SystemD service, as described here. Create a file named /etc/systemd/system/autossh.service
:
[Unit]
Description=Auto Reverse SSH
Requires=systemd-networkd-wait-online.service
After=systemd-networkd-wait-online.service
[Service]
ExecStart=/full/path/to/autossh -CD 8080 -i digitalOcean -R 8081:localhost:22 root@IPofDigitalOceanPC
[Install]
WantedBy=multi-user.target
Then run the following command as root:
systemctl enable autossh.service
add a comment |
A couple of things you can try:
chmod +x rev.sh
Sometimes your path isn't fully set at boot time or through cronjobs, so replace autossh with the full path, on my system that is
/usr/bin/autossh
@reboot motif depends on the cron daemon startup time, therefore it may be invoked before other subsystems (network?) are up and running
And your crontab example:
24 12 8 * * * bash /home/user/rev.sh
will only invoke on the 8th of every month. And it has an extra field. Try
24 12 * * * /home/user/rev.sh
sorry it was a mistake. I did try '24 12 * * * /home/user/rev.sh' but it still ddidnt work. To my surprise not even '24 12 * * * reboot' worked.
– Dina
Nov 17 '16 at 8:56
1
Well reboot certainly wont work unless you're invoking as root.
– siloko
Nov 17 '16 at 9:00
I tried adding /usr/bin/autossh. It did not work.
– Dina
Nov 17 '16 at 9:01
I tried 24 12 8 * * * reboot in the roots crontab. It did not work. Does it work on yours?
– Dina
Nov 17 '16 at 9:02
/usr/bin
is always in the defaultPATH
, even forcron
– roaima
Nov 21 '16 at 8:45
add a comment |
It seems to be, that when the script is executed via crontab it can't find your certificate.
When you as user execute the script, it uses the certificate from /home/ubuntu-user/.ssh/...
However when the script is executed from crontab it runs as root. root takes the certificats from /root/.ssh
So you have multiple ways to make it work, but I think running the script as ubuntu-user in crontab does it.
Edit:
make sure to provide a full qualified path for the certificate
add a comment |
Try using su
:
su -l user -c /home/user/rev.sh
Will it help with your issue?
add a comment |
since the question doesn't have so much data in it, I'll start from scratch with what I would do
I would put all the configurations in /etc/ssh/ssh_config:
Host mytunnel
HostName IPofDigitalOcean
User root # Are you sure about this??
IdentityFile /etc/ssh/mytunnel_key
RemoteForward 8081 localhost:22
DynamicForward 8080
I would put the key in /etc/ssh/mytunnel_key
then I would try with a cron entry (an upstart/systemd service would be better) like this:
@reboot /usr/bin/autossh -f -M 0 -T -N mytunnel
add a comment |
You need to use -f and run a command when you run without a terminal. So here's an example:
autossh -M 12374
-R 2205:127.0.0.1:22
-p 2200
-f
user@www.hostname.com
sleep 31536000
-f places it in the background, but placing it in the background means that ssh will connect, then disconnect as soon as it's completed its task. So you need a task.
sleep 31536000 tells ssh to run "sleep" for 1 year after connecting. During this time, your tunnels will remain up.
If you do not run a command, ssh will connect, setup the reverse tunnel on port 2205, and when it's done with that, it will exit. Using autossh, if the connection fails, it will reconnect and restart the sleep again. Even with a really stable internet connection, I doubt a year is possible.
BTW - unlike these other jokers, I know this works, since I actually tested it because of course I'm doing something similar and since I have it working now, very reliably, I can give you the correct answer.
-f and "command"
That's what you're missing.
1
I don't think we need to call other people names here.
– Jeff Schaller
Feb 13 at 23:41
1
I'm not calling other people names. I'm pointing out the solutions that were suggested previously were never tried by the people who suggested them. Don't believe me? Try them.
– Jimminy Doe
Feb 14 at 0:46
1
I don't think you've addressed the point of the question, either -- the OP claims This method works 100%. I believe their question centers around running their script in an automated way after their PC restarts.
– Jeff Schaller
Feb 14 at 1:32
1
If he's at work, he can setup the reverse tunnels to home, because the OP is running in a terminal - THAT works 100% of the time. The ssh (and autossh) programs act differently if they do not have a terminal associated with the process. He had problems having crontab (which runs without a terminal) reconnect the tunnels, precisely because he's not using -f, and even if he was, the ssh would exit once the tunnels were setup, without running something - in my case, I go run sleep, for a year. In the script -f must be used WITH A COMMAND that prevents SSH from exiting. That's his problem.
– Jimminy Doe
Feb 14 at 2:34
1
I suppose it was you, Jeff Schaller, for giving me a downvote, for giving the correct solution and actually testing it. I'm basically doing the same exact setup he is, except I'm setting up a PI to go through a firewall, and startup rdesktop, and giving it to our office manager, who doesn't know anything about Linux, to use it. Pretty certain I have a bulletproof solution, since I'm using it now, and I've rebooted both my pi remotely, and my local cable modem - just to be safe.. But heck, don't let a correct answer get in the way of an overblown, unearned, ego.
– Jimminy Doe
Feb 14 at 5:44
add a comment |
Your Answer
StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "106"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);
else
createEditor();
);
function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);
);
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f323925%2fmaking-an-automate-reverse-ssh-connection-at-boot%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
6 Answers
6
active
oldest
votes
6 Answers
6
active
oldest
votes
active
oldest
votes
active
oldest
votes
I'm not sure if using cron
to run a script on startup is such a good idea. An alternative I see more fit is to create a SystemD service, as described here. Create a file named /etc/systemd/system/autossh.service
:
[Unit]
Description=Auto Reverse SSH
Requires=systemd-networkd-wait-online.service
After=systemd-networkd-wait-online.service
[Service]
ExecStart=/full/path/to/autossh -CD 8080 -i digitalOcean -R 8081:localhost:22 root@IPofDigitalOceanPC
[Install]
WantedBy=multi-user.target
Then run the following command as root:
systemctl enable autossh.service
add a comment |
I'm not sure if using cron
to run a script on startup is such a good idea. An alternative I see more fit is to create a SystemD service, as described here. Create a file named /etc/systemd/system/autossh.service
:
[Unit]
Description=Auto Reverse SSH
Requires=systemd-networkd-wait-online.service
After=systemd-networkd-wait-online.service
[Service]
ExecStart=/full/path/to/autossh -CD 8080 -i digitalOcean -R 8081:localhost:22 root@IPofDigitalOceanPC
[Install]
WantedBy=multi-user.target
Then run the following command as root:
systemctl enable autossh.service
add a comment |
I'm not sure if using cron
to run a script on startup is such a good idea. An alternative I see more fit is to create a SystemD service, as described here. Create a file named /etc/systemd/system/autossh.service
:
[Unit]
Description=Auto Reverse SSH
Requires=systemd-networkd-wait-online.service
After=systemd-networkd-wait-online.service
[Service]
ExecStart=/full/path/to/autossh -CD 8080 -i digitalOcean -R 8081:localhost:22 root@IPofDigitalOceanPC
[Install]
WantedBy=multi-user.target
Then run the following command as root:
systemctl enable autossh.service
I'm not sure if using cron
to run a script on startup is such a good idea. An alternative I see more fit is to create a SystemD service, as described here. Create a file named /etc/systemd/system/autossh.service
:
[Unit]
Description=Auto Reverse SSH
Requires=systemd-networkd-wait-online.service
After=systemd-networkd-wait-online.service
[Service]
ExecStart=/full/path/to/autossh -CD 8080 -i digitalOcean -R 8081:localhost:22 root@IPofDigitalOceanPC
[Install]
WantedBy=multi-user.target
Then run the following command as root:
systemctl enable autossh.service
answered Nov 22 '16 at 13:17
Dmitry GrigoryevDmitry Grigoryev
5,089945
5,089945
add a comment |
add a comment |
A couple of things you can try:
chmod +x rev.sh
Sometimes your path isn't fully set at boot time or through cronjobs, so replace autossh with the full path, on my system that is
/usr/bin/autossh
@reboot motif depends on the cron daemon startup time, therefore it may be invoked before other subsystems (network?) are up and running
And your crontab example:
24 12 8 * * * bash /home/user/rev.sh
will only invoke on the 8th of every month. And it has an extra field. Try
24 12 * * * /home/user/rev.sh
sorry it was a mistake. I did try '24 12 * * * /home/user/rev.sh' but it still ddidnt work. To my surprise not even '24 12 * * * reboot' worked.
– Dina
Nov 17 '16 at 8:56
1
Well reboot certainly wont work unless you're invoking as root.
– siloko
Nov 17 '16 at 9:00
I tried adding /usr/bin/autossh. It did not work.
– Dina
Nov 17 '16 at 9:01
I tried 24 12 8 * * * reboot in the roots crontab. It did not work. Does it work on yours?
– Dina
Nov 17 '16 at 9:02
/usr/bin
is always in the defaultPATH
, even forcron
– roaima
Nov 21 '16 at 8:45
add a comment |
A couple of things you can try:
chmod +x rev.sh
Sometimes your path isn't fully set at boot time or through cronjobs, so replace autossh with the full path, on my system that is
/usr/bin/autossh
@reboot motif depends on the cron daemon startup time, therefore it may be invoked before other subsystems (network?) are up and running
And your crontab example:
24 12 8 * * * bash /home/user/rev.sh
will only invoke on the 8th of every month. And it has an extra field. Try
24 12 * * * /home/user/rev.sh
sorry it was a mistake. I did try '24 12 * * * /home/user/rev.sh' but it still ddidnt work. To my surprise not even '24 12 * * * reboot' worked.
– Dina
Nov 17 '16 at 8:56
1
Well reboot certainly wont work unless you're invoking as root.
– siloko
Nov 17 '16 at 9:00
I tried adding /usr/bin/autossh. It did not work.
– Dina
Nov 17 '16 at 9:01
I tried 24 12 8 * * * reboot in the roots crontab. It did not work. Does it work on yours?
– Dina
Nov 17 '16 at 9:02
/usr/bin
is always in the defaultPATH
, even forcron
– roaima
Nov 21 '16 at 8:45
add a comment |
A couple of things you can try:
chmod +x rev.sh
Sometimes your path isn't fully set at boot time or through cronjobs, so replace autossh with the full path, on my system that is
/usr/bin/autossh
@reboot motif depends on the cron daemon startup time, therefore it may be invoked before other subsystems (network?) are up and running
And your crontab example:
24 12 8 * * * bash /home/user/rev.sh
will only invoke on the 8th of every month. And it has an extra field. Try
24 12 * * * /home/user/rev.sh
A couple of things you can try:
chmod +x rev.sh
Sometimes your path isn't fully set at boot time or through cronjobs, so replace autossh with the full path, on my system that is
/usr/bin/autossh
@reboot motif depends on the cron daemon startup time, therefore it may be invoked before other subsystems (network?) are up and running
And your crontab example:
24 12 8 * * * bash /home/user/rev.sh
will only invoke on the 8th of every month. And it has an extra field. Try
24 12 * * * /home/user/rev.sh
answered Nov 17 '16 at 8:47
silokosiloko
23115
23115
sorry it was a mistake. I did try '24 12 * * * /home/user/rev.sh' but it still ddidnt work. To my surprise not even '24 12 * * * reboot' worked.
– Dina
Nov 17 '16 at 8:56
1
Well reboot certainly wont work unless you're invoking as root.
– siloko
Nov 17 '16 at 9:00
I tried adding /usr/bin/autossh. It did not work.
– Dina
Nov 17 '16 at 9:01
I tried 24 12 8 * * * reboot in the roots crontab. It did not work. Does it work on yours?
– Dina
Nov 17 '16 at 9:02
/usr/bin
is always in the defaultPATH
, even forcron
– roaima
Nov 21 '16 at 8:45
add a comment |
sorry it was a mistake. I did try '24 12 * * * /home/user/rev.sh' but it still ddidnt work. To my surprise not even '24 12 * * * reboot' worked.
– Dina
Nov 17 '16 at 8:56
1
Well reboot certainly wont work unless you're invoking as root.
– siloko
Nov 17 '16 at 9:00
I tried adding /usr/bin/autossh. It did not work.
– Dina
Nov 17 '16 at 9:01
I tried 24 12 8 * * * reboot in the roots crontab. It did not work. Does it work on yours?
– Dina
Nov 17 '16 at 9:02
/usr/bin
is always in the defaultPATH
, even forcron
– roaima
Nov 21 '16 at 8:45
sorry it was a mistake. I did try '24 12 * * * /home/user/rev.sh' but it still ddidnt work. To my surprise not even '24 12 * * * reboot' worked.
– Dina
Nov 17 '16 at 8:56
sorry it was a mistake. I did try '24 12 * * * /home/user/rev.sh' but it still ddidnt work. To my surprise not even '24 12 * * * reboot' worked.
– Dina
Nov 17 '16 at 8:56
1
1
Well reboot certainly wont work unless you're invoking as root.
– siloko
Nov 17 '16 at 9:00
Well reboot certainly wont work unless you're invoking as root.
– siloko
Nov 17 '16 at 9:00
I tried adding /usr/bin/autossh. It did not work.
– Dina
Nov 17 '16 at 9:01
I tried adding /usr/bin/autossh. It did not work.
– Dina
Nov 17 '16 at 9:01
I tried 24 12 8 * * * reboot in the roots crontab. It did not work. Does it work on yours?
– Dina
Nov 17 '16 at 9:02
I tried 24 12 8 * * * reboot in the roots crontab. It did not work. Does it work on yours?
– Dina
Nov 17 '16 at 9:02
/usr/bin
is always in the default PATH
, even for cron
– roaima
Nov 21 '16 at 8:45
/usr/bin
is always in the default PATH
, even for cron
– roaima
Nov 21 '16 at 8:45
add a comment |
It seems to be, that when the script is executed via crontab it can't find your certificate.
When you as user execute the script, it uses the certificate from /home/ubuntu-user/.ssh/...
However when the script is executed from crontab it runs as root. root takes the certificats from /root/.ssh
So you have multiple ways to make it work, but I think running the script as ubuntu-user in crontab does it.
Edit:
make sure to provide a full qualified path for the certificate
add a comment |
It seems to be, that when the script is executed via crontab it can't find your certificate.
When you as user execute the script, it uses the certificate from /home/ubuntu-user/.ssh/...
However when the script is executed from crontab it runs as root. root takes the certificats from /root/.ssh
So you have multiple ways to make it work, but I think running the script as ubuntu-user in crontab does it.
Edit:
make sure to provide a full qualified path for the certificate
add a comment |
It seems to be, that when the script is executed via crontab it can't find your certificate.
When you as user execute the script, it uses the certificate from /home/ubuntu-user/.ssh/...
However when the script is executed from crontab it runs as root. root takes the certificats from /root/.ssh
So you have multiple ways to make it work, but I think running the script as ubuntu-user in crontab does it.
Edit:
make sure to provide a full qualified path for the certificate
It seems to be, that when the script is executed via crontab it can't find your certificate.
When you as user execute the script, it uses the certificate from /home/ubuntu-user/.ssh/...
However when the script is executed from crontab it runs as root. root takes the certificats from /root/.ssh
So you have multiple ways to make it work, but I think running the script as ubuntu-user in crontab does it.
Edit:
make sure to provide a full qualified path for the certificate
edited Nov 22 '16 at 13:50
answered Nov 22 '16 at 13:36
sysssyss
430617
430617
add a comment |
add a comment |
Try using su
:
su -l user -c /home/user/rev.sh
Will it help with your issue?
add a comment |
Try using su
:
su -l user -c /home/user/rev.sh
Will it help with your issue?
add a comment |
Try using su
:
su -l user -c /home/user/rev.sh
Will it help with your issue?
Try using su
:
su -l user -c /home/user/rev.sh
Will it help with your issue?
answered Nov 22 '16 at 14:33
Fedor DikarevFedor Dikarev
1,023310
1,023310
add a comment |
add a comment |
since the question doesn't have so much data in it, I'll start from scratch with what I would do
I would put all the configurations in /etc/ssh/ssh_config:
Host mytunnel
HostName IPofDigitalOcean
User root # Are you sure about this??
IdentityFile /etc/ssh/mytunnel_key
RemoteForward 8081 localhost:22
DynamicForward 8080
I would put the key in /etc/ssh/mytunnel_key
then I would try with a cron entry (an upstart/systemd service would be better) like this:
@reboot /usr/bin/autossh -f -M 0 -T -N mytunnel
add a comment |
since the question doesn't have so much data in it, I'll start from scratch with what I would do
I would put all the configurations in /etc/ssh/ssh_config:
Host mytunnel
HostName IPofDigitalOcean
User root # Are you sure about this??
IdentityFile /etc/ssh/mytunnel_key
RemoteForward 8081 localhost:22
DynamicForward 8080
I would put the key in /etc/ssh/mytunnel_key
then I would try with a cron entry (an upstart/systemd service would be better) like this:
@reboot /usr/bin/autossh -f -M 0 -T -N mytunnel
add a comment |
since the question doesn't have so much data in it, I'll start from scratch with what I would do
I would put all the configurations in /etc/ssh/ssh_config:
Host mytunnel
HostName IPofDigitalOcean
User root # Are you sure about this??
IdentityFile /etc/ssh/mytunnel_key
RemoteForward 8081 localhost:22
DynamicForward 8080
I would put the key in /etc/ssh/mytunnel_key
then I would try with a cron entry (an upstart/systemd service would be better) like this:
@reboot /usr/bin/autossh -f -M 0 -T -N mytunnel
since the question doesn't have so much data in it, I'll start from scratch with what I would do
I would put all the configurations in /etc/ssh/ssh_config:
Host mytunnel
HostName IPofDigitalOcean
User root # Are you sure about this??
IdentityFile /etc/ssh/mytunnel_key
RemoteForward 8081 localhost:22
DynamicForward 8080
I would put the key in /etc/ssh/mytunnel_key
then I would try with a cron entry (an upstart/systemd service would be better) like this:
@reboot /usr/bin/autossh -f -M 0 -T -N mytunnel
answered Nov 24 '16 at 18:48
Diego RocciaDiego Roccia
49426
49426
add a comment |
add a comment |
You need to use -f and run a command when you run without a terminal. So here's an example:
autossh -M 12374
-R 2205:127.0.0.1:22
-p 2200
-f
user@www.hostname.com
sleep 31536000
-f places it in the background, but placing it in the background means that ssh will connect, then disconnect as soon as it's completed its task. So you need a task.
sleep 31536000 tells ssh to run "sleep" for 1 year after connecting. During this time, your tunnels will remain up.
If you do not run a command, ssh will connect, setup the reverse tunnel on port 2205, and when it's done with that, it will exit. Using autossh, if the connection fails, it will reconnect and restart the sleep again. Even with a really stable internet connection, I doubt a year is possible.
BTW - unlike these other jokers, I know this works, since I actually tested it because of course I'm doing something similar and since I have it working now, very reliably, I can give you the correct answer.
-f and "command"
That's what you're missing.
1
I don't think we need to call other people names here.
– Jeff Schaller
Feb 13 at 23:41
1
I'm not calling other people names. I'm pointing out the solutions that were suggested previously were never tried by the people who suggested them. Don't believe me? Try them.
– Jimminy Doe
Feb 14 at 0:46
1
I don't think you've addressed the point of the question, either -- the OP claims This method works 100%. I believe their question centers around running their script in an automated way after their PC restarts.
– Jeff Schaller
Feb 14 at 1:32
1
If he's at work, he can setup the reverse tunnels to home, because the OP is running in a terminal - THAT works 100% of the time. The ssh (and autossh) programs act differently if they do not have a terminal associated with the process. He had problems having crontab (which runs without a terminal) reconnect the tunnels, precisely because he's not using -f, and even if he was, the ssh would exit once the tunnels were setup, without running something - in my case, I go run sleep, for a year. In the script -f must be used WITH A COMMAND that prevents SSH from exiting. That's his problem.
– Jimminy Doe
Feb 14 at 2:34
1
I suppose it was you, Jeff Schaller, for giving me a downvote, for giving the correct solution and actually testing it. I'm basically doing the same exact setup he is, except I'm setting up a PI to go through a firewall, and startup rdesktop, and giving it to our office manager, who doesn't know anything about Linux, to use it. Pretty certain I have a bulletproof solution, since I'm using it now, and I've rebooted both my pi remotely, and my local cable modem - just to be safe.. But heck, don't let a correct answer get in the way of an overblown, unearned, ego.
– Jimminy Doe
Feb 14 at 5:44
add a comment |
You need to use -f and run a command when you run without a terminal. So here's an example:
autossh -M 12374
-R 2205:127.0.0.1:22
-p 2200
-f
user@www.hostname.com
sleep 31536000
-f places it in the background, but placing it in the background means that ssh will connect, then disconnect as soon as it's completed its task. So you need a task.
sleep 31536000 tells ssh to run "sleep" for 1 year after connecting. During this time, your tunnels will remain up.
If you do not run a command, ssh will connect, setup the reverse tunnel on port 2205, and when it's done with that, it will exit. Using autossh, if the connection fails, it will reconnect and restart the sleep again. Even with a really stable internet connection, I doubt a year is possible.
BTW - unlike these other jokers, I know this works, since I actually tested it because of course I'm doing something similar and since I have it working now, very reliably, I can give you the correct answer.
-f and "command"
That's what you're missing.
1
I don't think we need to call other people names here.
– Jeff Schaller
Feb 13 at 23:41
1
I'm not calling other people names. I'm pointing out the solutions that were suggested previously were never tried by the people who suggested them. Don't believe me? Try them.
– Jimminy Doe
Feb 14 at 0:46
1
I don't think you've addressed the point of the question, either -- the OP claims This method works 100%. I believe their question centers around running their script in an automated way after their PC restarts.
– Jeff Schaller
Feb 14 at 1:32
1
If he's at work, he can setup the reverse tunnels to home, because the OP is running in a terminal - THAT works 100% of the time. The ssh (and autossh) programs act differently if they do not have a terminal associated with the process. He had problems having crontab (which runs without a terminal) reconnect the tunnels, precisely because he's not using -f, and even if he was, the ssh would exit once the tunnels were setup, without running something - in my case, I go run sleep, for a year. In the script -f must be used WITH A COMMAND that prevents SSH from exiting. That's his problem.
– Jimminy Doe
Feb 14 at 2:34
1
I suppose it was you, Jeff Schaller, for giving me a downvote, for giving the correct solution and actually testing it. I'm basically doing the same exact setup he is, except I'm setting up a PI to go through a firewall, and startup rdesktop, and giving it to our office manager, who doesn't know anything about Linux, to use it. Pretty certain I have a bulletproof solution, since I'm using it now, and I've rebooted both my pi remotely, and my local cable modem - just to be safe.. But heck, don't let a correct answer get in the way of an overblown, unearned, ego.
– Jimminy Doe
Feb 14 at 5:44
add a comment |
You need to use -f and run a command when you run without a terminal. So here's an example:
autossh -M 12374
-R 2205:127.0.0.1:22
-p 2200
-f
user@www.hostname.com
sleep 31536000
-f places it in the background, but placing it in the background means that ssh will connect, then disconnect as soon as it's completed its task. So you need a task.
sleep 31536000 tells ssh to run "sleep" for 1 year after connecting. During this time, your tunnels will remain up.
If you do not run a command, ssh will connect, setup the reverse tunnel on port 2205, and when it's done with that, it will exit. Using autossh, if the connection fails, it will reconnect and restart the sleep again. Even with a really stable internet connection, I doubt a year is possible.
BTW - unlike these other jokers, I know this works, since I actually tested it because of course I'm doing something similar and since I have it working now, very reliably, I can give you the correct answer.
-f and "command"
That's what you're missing.
You need to use -f and run a command when you run without a terminal. So here's an example:
autossh -M 12374
-R 2205:127.0.0.1:22
-p 2200
-f
user@www.hostname.com
sleep 31536000
-f places it in the background, but placing it in the background means that ssh will connect, then disconnect as soon as it's completed its task. So you need a task.
sleep 31536000 tells ssh to run "sleep" for 1 year after connecting. During this time, your tunnels will remain up.
If you do not run a command, ssh will connect, setup the reverse tunnel on port 2205, and when it's done with that, it will exit. Using autossh, if the connection fails, it will reconnect and restart the sleep again. Even with a really stable internet connection, I doubt a year is possible.
BTW - unlike these other jokers, I know this works, since I actually tested it because of course I'm doing something similar and since I have it working now, very reliably, I can give you the correct answer.
-f and "command"
That's what you're missing.
answered Feb 13 at 23:09
Jimminy DoeJimminy Doe
11
11
1
I don't think we need to call other people names here.
– Jeff Schaller
Feb 13 at 23:41
1
I'm not calling other people names. I'm pointing out the solutions that were suggested previously were never tried by the people who suggested them. Don't believe me? Try them.
– Jimminy Doe
Feb 14 at 0:46
1
I don't think you've addressed the point of the question, either -- the OP claims This method works 100%. I believe their question centers around running their script in an automated way after their PC restarts.
– Jeff Schaller
Feb 14 at 1:32
1
If he's at work, he can setup the reverse tunnels to home, because the OP is running in a terminal - THAT works 100% of the time. The ssh (and autossh) programs act differently if they do not have a terminal associated with the process. He had problems having crontab (which runs without a terminal) reconnect the tunnels, precisely because he's not using -f, and even if he was, the ssh would exit once the tunnels were setup, without running something - in my case, I go run sleep, for a year. In the script -f must be used WITH A COMMAND that prevents SSH from exiting. That's his problem.
– Jimminy Doe
Feb 14 at 2:34
1
I suppose it was you, Jeff Schaller, for giving me a downvote, for giving the correct solution and actually testing it. I'm basically doing the same exact setup he is, except I'm setting up a PI to go through a firewall, and startup rdesktop, and giving it to our office manager, who doesn't know anything about Linux, to use it. Pretty certain I have a bulletproof solution, since I'm using it now, and I've rebooted both my pi remotely, and my local cable modem - just to be safe.. But heck, don't let a correct answer get in the way of an overblown, unearned, ego.
– Jimminy Doe
Feb 14 at 5:44
add a comment |
1
I don't think we need to call other people names here.
– Jeff Schaller
Feb 13 at 23:41
1
I'm not calling other people names. I'm pointing out the solutions that were suggested previously were never tried by the people who suggested them. Don't believe me? Try them.
– Jimminy Doe
Feb 14 at 0:46
1
I don't think you've addressed the point of the question, either -- the OP claims This method works 100%. I believe their question centers around running their script in an automated way after their PC restarts.
– Jeff Schaller
Feb 14 at 1:32
1
If he's at work, he can setup the reverse tunnels to home, because the OP is running in a terminal - THAT works 100% of the time. The ssh (and autossh) programs act differently if they do not have a terminal associated with the process. He had problems having crontab (which runs without a terminal) reconnect the tunnels, precisely because he's not using -f, and even if he was, the ssh would exit once the tunnels were setup, without running something - in my case, I go run sleep, for a year. In the script -f must be used WITH A COMMAND that prevents SSH from exiting. That's his problem.
– Jimminy Doe
Feb 14 at 2:34
1
I suppose it was you, Jeff Schaller, for giving me a downvote, for giving the correct solution and actually testing it. I'm basically doing the same exact setup he is, except I'm setting up a PI to go through a firewall, and startup rdesktop, and giving it to our office manager, who doesn't know anything about Linux, to use it. Pretty certain I have a bulletproof solution, since I'm using it now, and I've rebooted both my pi remotely, and my local cable modem - just to be safe.. But heck, don't let a correct answer get in the way of an overblown, unearned, ego.
– Jimminy Doe
Feb 14 at 5:44
1
1
I don't think we need to call other people names here.
– Jeff Schaller
Feb 13 at 23:41
I don't think we need to call other people names here.
– Jeff Schaller
Feb 13 at 23:41
1
1
I'm not calling other people names. I'm pointing out the solutions that were suggested previously were never tried by the people who suggested them. Don't believe me? Try them.
– Jimminy Doe
Feb 14 at 0:46
I'm not calling other people names. I'm pointing out the solutions that were suggested previously were never tried by the people who suggested them. Don't believe me? Try them.
– Jimminy Doe
Feb 14 at 0:46
1
1
I don't think you've addressed the point of the question, either -- the OP claims This method works 100%. I believe their question centers around running their script in an automated way after their PC restarts.
– Jeff Schaller
Feb 14 at 1:32
I don't think you've addressed the point of the question, either -- the OP claims This method works 100%. I believe their question centers around running their script in an automated way after their PC restarts.
– Jeff Schaller
Feb 14 at 1:32
1
1
If he's at work, he can setup the reverse tunnels to home, because the OP is running in a terminal - THAT works 100% of the time. The ssh (and autossh) programs act differently if they do not have a terminal associated with the process. He had problems having crontab (which runs without a terminal) reconnect the tunnels, precisely because he's not using -f, and even if he was, the ssh would exit once the tunnels were setup, without running something - in my case, I go run sleep, for a year. In the script -f must be used WITH A COMMAND that prevents SSH from exiting. That's his problem.
– Jimminy Doe
Feb 14 at 2:34
If he's at work, he can setup the reverse tunnels to home, because the OP is running in a terminal - THAT works 100% of the time. The ssh (and autossh) programs act differently if they do not have a terminal associated with the process. He had problems having crontab (which runs without a terminal) reconnect the tunnels, precisely because he's not using -f, and even if he was, the ssh would exit once the tunnels were setup, without running something - in my case, I go run sleep, for a year. In the script -f must be used WITH A COMMAND that prevents SSH from exiting. That's his problem.
– Jimminy Doe
Feb 14 at 2:34
1
1
I suppose it was you, Jeff Schaller, for giving me a downvote, for giving the correct solution and actually testing it. I'm basically doing the same exact setup he is, except I'm setting up a PI to go through a firewall, and startup rdesktop, and giving it to our office manager, who doesn't know anything about Linux, to use it. Pretty certain I have a bulletproof solution, since I'm using it now, and I've rebooted both my pi remotely, and my local cable modem - just to be safe.. But heck, don't let a correct answer get in the way of an overblown, unearned, ego.
– Jimminy Doe
Feb 14 at 5:44
I suppose it was you, Jeff Schaller, for giving me a downvote, for giving the correct solution and actually testing it. I'm basically doing the same exact setup he is, except I'm setting up a PI to go through a firewall, and startup rdesktop, and giving it to our office manager, who doesn't know anything about Linux, to use it. Pretty certain I have a bulletproof solution, since I'm using it now, and I've rebooted both my pi remotely, and my local cable modem - just to be safe.. But heck, don't let a correct answer get in the way of an overblown, unearned, ego.
– Jimminy Doe
Feb 14 at 5:44
add a comment |
Thanks for contributing an answer to Unix & Linux Stack Exchange!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f323925%2fmaking-an-automate-reverse-ssh-connection-at-boot%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
I'm not quite sure what is your problem here. Is it cron not starting any job? Or script not working? With both problems, please, consult logs. Cron should write somewhere to
/var/log/cron*
. For test purposes you could simply write something like*/2 * * * * /path/to/script
- it will run a script every 2 minutes. Also check for mails for user running cron. Is it root? Usemail
command. Oh, I can see that you are using ssh key? I doubt that cron job will be able to find it if you won't give a full path to it after-i
switch.– Kalavan
Nov 22 '16 at 11:06