当前位置:网站首页>Olivetin can safely run shell commands on Web pages (Part 1)

Olivetin can safely run shell commands on Web pages (Part 1)

2022-07-06 17:51:00 Yangpu Laosu

I suddenly received a notice from the neighborhood committee yesterday afternoon , evening 7 Spot full screening . It seems that there should be another one in these two days


Net friend figo ask : Is there any software or docker One key shutdown and one key restart Linux host ? Instead of opening the command line to execute the command ., Old Su thought of lying in the plan list for a long time at the first time OliveTin, The reason why I didn't move was because I didn't think about what to do . I didn't find it until I really began to toss ,OliveTin More problems than expected , Even the official examples can encounter pits , It may be because docker The way is Synology For running on , On the contrary, it aroused Lao Su's interest .

What is? OliveTin ?

OliveTin Can let you from Web The interface safely and simply accesses predefined shell command .

 Insert picture description here

Get ready

First of all, prepare for config.yaml file , The simplest is, of course, to copy the official sample document , You can copy and paste , You can also save it as .https://raw.githubusercontent.com/OliveTin/OliveTin/main/config.yaml

Action

A standard action ( We can understand it as a button ) There are several parts :

  • title: title , This is required , Used to identify action;
  • shell: Script , It's also required , To perform specific tasks ;
  • icon: Icon , This is not necessary , But some words will look more comfortable , Except for the pictures , And support https://unicode-table.com/en/emoji/ Of emoji;
  • arguments: Parameters , This is not necessary , Can be used to implement some variables , Give Way shell Have some flexibility ;
  • timeout: Overtime , This is also unnecessary ;

So in general , A button just title and shell That's all right. , Take the simplest complete config.yaml Example

#  Listening port 
listenAddressSingleHTTPFrontend: 0.0.0.0:1337 

#  The level of logging :INFO (default), WARN  and  DEBUG
logLevel: "INFO"

#  Show new version 
showNewVersions: true

# Actions (buttons) to show up on the WebUI:
actions:  
#  Start with the simplest 
- title:  function echo
  icon: "📝"
  shell: echo " I'm old su ."

You can also use this as config.yaml, Let the container run first and then modify 、 Perfect and enrich functions .

install

On the group light with Docker Way to install .

Search the registry for olivetin , Select first jamesread/olivetin, Version selection latest.

Container name

Because you need to enter the container through the command line later , It is recommended to change the name of the container to olivetin, Of course, this is not necessary , You can also directly change the container name in the command line

 Insert picture description here

volume

stay docker In the folder , Create a new folder olivetin

Folder Loading path explain
docker/olivetin/config Storage settings

Suggest to check read-only

port

The local port does not conflict , If you're not sure, you can use the command to check

#  Check port usage 
netstat -tunlp | grep  Port number 
Local port Container port
13371337

 Insert picture description here

Command line installation

If you are familiar with the command line , Possible docker cli Faster

#  New folder  kavita  and   subdirectories 
mkdir -p /volume2/docker/olivetin

#  Get into  kavita  Catalog 
cd /volume2/docker/olivetin

#  Upload  config.yaml  File to the current directory 

#  Run container 
docker run -d \
   --restart unless-stopped \
   --name olivetin \
   -p 1337:1337 \
   -v $(pwd):/config:ro \
   jamesread/olivetin

It can also be used. docker-compose install , The following is the official docker-compose.yml, Pay attention to modifying the path

version: "3.8"

services:
  olivetin:
    container_name: olivetin
    image: jamesread/olivetin
    volumes:
      - ./:/config # replace host path or volume as needed
    ports:
      - "1337:1337"
    restart: unless-stopped

networks:
  web:
  section:
    external: true

Then execute the following command , Because the relative path is adopted , stay portainer It is also possible to execute in

#  New folder  kavita  and   subdirectories 
mkdir -p /volume2/docker/olivetin

#  Get into  kavita  Catalog 
cd /volume2/docker/olivetin

#  take  docker-compose.yml  and  config.yaml  Put in the current directory 

#  One button start 
docker-compose up -d

function

Enter... In the browser http:// Synology IP:1337 You can see the main interface

This is the official config.yaml The interface of

If you use Lao Su's minimization example , There is only one button , We click function echo Button

Will be displayed [Success]

Detailed information can be found in the upper right corner Logs View in

 Insert picture description here

remaining problems

problem 1: jurisdiction

There's an official ping An example of , Considering that you can't visit at home google, So Lao Su changed the target address to baidu

actions:
    # This sends 1 ping to baidu.com.
  - title: ping baidu.com
    shell: ping baidu.com -c 4
    icon: ping
    timeout: 3

By default , You will meet ping: usage error: Destination address required

And if you will shell Change it to sudo ping baidu.com -c 1 when , You will need to enter password for olivetin, So the only way is docker cli The next execution container is added --user=root perhaps --privileged

#  use  root  Run container 
docker run -d \
   --restart unless-stopped \
   --name olivetin \
   --user=root \
   -p 1337:1337 \
   -v $(pwd):/config:ro \
   jamesread/olivetin

problem 2:ssh password

The government also provided ssh An example of , Lao Su made adjustments

ssh The identity of the login host can be root Or any other authorized account , It's just for demonstration , Generally, it is not recommended to use it directly root

actions:
- title:  Log in to  ds3617xs ping  Baidu 
  shell: ssh [email protected] 'ping baidu.com -c 4'
  icon: "📌"
  timeout: 50

perform ssh It doesn't need to root jurisdiction , But because you can't enter the password directly on the command line , So it will lead to timeout

perhaps Exit code 255

The official idea is to use SSH Key setting no password login , But old Su thought this way was not flexible .

Lao Su thought of a kind of flexible , But a relatively safe solution , Coming soon ~

Friday , Be there or be square !

Reference documents

OliveTin/OliveTin: OliveTin gives safe and simple access to predefined shell commands from a web interface.
Address :https://github.com/OliveTin/OliveTin

OliveTin - give safe and simple access to predefined shell commands from a web interface
Address :https://www.olivetin.app/

OliveTin documentation
Address :https://docs.olivetin.app/

List of common exit codes for GNU/Linux
Address :https://slg.ddnss.de/list-of-common-exit-codes-for-gnu-linux/

原网站

版权声明
本文为[Yangpu Laosu]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/187/202207060941239781.html