====== Systems - SSH: Manage users ====== ===== Introduction ===== [[https://github.com/bcvsolutions/ssh-connector|SSH connector]] is used for communication through SSH protocol. Connector uses CSV files to transfer data between IDM and the connected server. These CSV files must be parsed in scripts specified in the connector configuration. Then the script performs operation required by IDM based on the information provided in CSV. Scripts are stored on the connected server. ===== Schema ===== A required schema attribute is __NAME__ - java.lang.String. Value of this attribute is used in the scripts as "AccountId". ===== Example CSV files ===== Get operation - example input of the script: getUser AccountId user1 Get operation - example output of the script: AccountId;Name;EmailAddress "user1";"John Doe";"john.doe@domain.tld" Create operation - example input of the script: createUser Name;EmailAddress John Doe;john.doe@domain.tld Create operation - example output of the script: AccountId user1 List objects operation - example input of the script: listObjects objectType Users List objects operation - example output of the script: AccountId user1 user2 user3 ===== Example of bash script for all connector operations ===== The script uses external AWK script for parsing CSV: {{.:csvawk.txt|csvawk.txt}} #!/bin/bash # Autor: BCV solutions s.r.o. ##################################################################################################################################################### # CONFIGURATION # ##################################################################################################################################################### # Awk skript for CSV parsing AWKCSV="/home/bcv/csvawk.txt" # Used programs (standard linux distribution) AWK=/bin/awk # Log file LOG_FILE="/home/bcv/ssh_connector.log" ##################################################################################################################################################### # Log Log () { cat ->> $LOG_FILE } # Error Error() { cat - >&2 [ $# -ge 1 ] && exit $1 } parseInput() { Log <<< "parseInput() BEGIN" OIFS=$IFS; IFS=\; local row=0 while read input; do row=$((row+1)) Log <<< "row: $row, input: $input" if [ ${row} -eq 1 ]; then IDM_Request=$input; fi if [ ${row} -eq 2 ]; then CSVH=( $input ); fi if [ ${row} -eq 3 ]; then IFS=$OIFS eval $($AWK -f $AWKCSV <<< ${input}) break fi done IFS=$OIFS; #Basic input validation - header cannot have less columns than values if [ ${#CSVV[*]} -gt ${#CSVH[*]} ]; then Error 1 <<< "ERROR: Spatny format CSV dat $1." fi for i in $(seq 0 $((${#CSVH[*]} - 1))); do eval "CSV_${CSVH[$i]}=\"${CSVV[$i]}\"" done Log <<< "parseInput() END" } # Use operation from IDM useOperation() { Log <<< "useOperation() BEGIN" Log <<< "variable IDM_REQUEST: $IDM_Request" case "$IDM_Request" in ("listObjects") listUsers ;; ("getUser") getUser ;; ("createUser") createUser ;; ("updateUser") updateUser ;; ("deleteUser") deleteUser ;; (*) Error 1 <<< "ERROR: Unsupported operation $IDM_Request." ;; esac Log <<< "useOperation() END" } listUsers(){ Log <<< "listUsers() BEGIN" echo "AccountId" # Add your code here Log <<< "listUsers() END" } getUser() { Log <<< "getUser() BEGIN" if [ "x$CSV_AccountId" != "x" ]; then CSV_login=$CSV_AccountId elif [ "x$CSV_Name" != "x" ]; then CSV_login=$CSV_name else Error 110 <<< "ERROR: Nebylo zadano accountId ani Name." fi Log <<< "getUser() LOGIN: $CSV_AccountId" #echo "AccountId;attrname" #echo "${CSV_login};attrvalue # Add your code here Log <<< "getUser() END" } createUser() { Log <<< "createUser() BEGIN" Log <<< "createUser() LOGIN: $CSV_AccountId" # Add your code here echo $CSV_login Log <<< "createUser() END" } updateUser() { Log <<< "updateUser() BEGIN" Log <<< "updateUser() LOGIN: $CSV_AccountId" # Add your code here echo $CSV_AccountId Log <<< "updateUser() END" } deleteUser() { Log <<< "deleteUser() BEGIN" Log <<< "deleteUser() LOGIN: $CSV_AccountId" # Add your code here Log <<< "deleteUser() END" } Log <<< "======== SCRIPT STARTED ========" parseInput useOperation Log <<< "======== SCRIPT FINISHED ========" ===== Known issues ===== See the list of known issues in our [[https://redmine.czechidm.com/projects/ssh-connector/issues|tracking system]]